我正在为现有网站开发一个仅限移动设备的子域名网站。 (主要网站是www.domain.com,我正在开发的仅限移动网站是m.domain.com。)
当用户登录主网站时,我想将其重定向到仅限移动设备的网站:
重定向时,他们不必再次登录。所以我想在各个网站上共享身份验证。主网站使用表单身份验证。
我正在尝试按照文章Forms Authentication Across Applications中描述的步骤进行操作。主要的是,您必须“将 Web.config 文件的表单和machineKey
部分的属性设置为参与共享表单身份验证的所有应用程序的相同值。”< / p>
我做到了这一点。但是,它仍然无法正常工作。我可以使用相同的凭据登录或退出任一站点。但登录或退出一个站点对另一个站点的登录状态没有任何影响。
文章有这样的说明:
如果在每个ASP.NET 2.0版(或更高版本)应用程序的machineKey元素中包含decryption =“3DES”,则运行ASP.NET 2.0或更高版本的应用程序可以与早期版本的ASP.NET共享表单身份验证票证信息
这似乎不适用。
另外,我没有指定domain
元素的authentication
属性。它表示它是可选的,默认值为“”。
任何人都可以提出我可能会尝试的其他建议。我只是不知道从哪里开始。
答案 0 :(得分:3)
这是错的。
另外,我没有指定身份验证的域属性 元件。它说它是可选的,默认值为&#34;&#34;。
你应该像这样在forms元素中设置domain属性(不确定指示子域的点)。
<forms domain=".mydomain.com" loginUrl="member_login.aspx" cookieless="UseCookies" />
通过使用forms配置元素的domain属性,在ASP.NET应用程序的配置文件中设置CookieDomain属性值。 CookieDomain属性值确定cookie将用于的域。
链接中的文档说明了
如果只有,您可以省略forms标签的domain属性 服务器上的一个网站。
在你的情况下,它不是。
答案 1 :(得分:2)
由于您只想在同一个域内共享,因此这不应该是一个问题。只有当您要处理多个服务器或域时,机器密钥才有意义。
在您的情况下,它是同一服务器上的同一个域,因此如果您将域(httpcookie中有一个属性)设置为&#34; domain.com&#34; (您不应该在您的身份验证cookie中提及任何子域名),我记得这可以在web.config(表单身份验证部分)本身中完成,这应该适合您。
<authentication mode="Forms"> <forms loginUrl="~/account/login" timeout="30" name=".FormAuth" cookieless="UseCookies" enableCrossAppRedirects="true" domain=".domain.com" /> </authentication>
或者如果你手动创建cookie,你可以创建一个类似的,
var cookie = new HttpCookie(); cookie.Domain = ".domain.com";
这篇好文章解释了相同的内容,我后来发现......