在实现基于子域的语言切换器时遇到了障碍(en.domain.com 加载英语,jp.domain.com 加载日语)。
如何让单个会员系统跨多个子域(ASP.NET MVC C#)工作?
看到一些关于添加domain="domain.com"
到<forms >
web.config 中的条目的内容。做到了,但是在本地 Visual Studio 开发 Web 服务器上进行测试时是否有效?
在实现基于子域的语言切换器时遇到了障碍(en.domain.com 加载英语,jp.domain.com 加载日语)。
如何让单个会员系统跨多个子域(ASP.NET MVC C#)工作?
看到一些关于添加domain="domain.com"
到<forms >
web.config 中的条目的内容。做到了,但是在本地 Visual Studio 开发 Web 服务器上进行测试时是否有效?
尝试自己创建 cookie。
在AccountController中,您会发现:
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
即“创建并添加到 cookie 集合”。它不允许修改域(但奇怪的是允许修改路径)。而是创建一个cookie而不添加到集合中,修改必要的属性,然后添加到集合中:
var a = FormsAuthentication.GetAuthCookie(userName, createPersistentCookie);
//if you're debugging right here, a.Domain should be en.example.com; change it
a.Domain = "example.com";
HttpContext.Current.Response.Cookies.Add(a);
詹姆士
你必须使用点前缀,像这样。
<authentication mode="Forms">
<forms domain=".tv.loc" loginUrl="~/signin" timeout="2880" name="auth" />
</authentication>
您的问题是浏览器在请求期间如何发送 cookie。
Cookie 通常与单个域绑定,这是出于安全原因和性能考虑。例如,用户不想将您的域的 cookie 发送到任何其他域,因为您的 cookie 可能包含敏感信息。
浏览器会区分使用 en.domain.com 和 jp.domain.com 设置的 cookie。它们不允许来自一个域的 cookie 转到另一个域,因为它们不在父域上。
您的问题的解决方案是接管生成 cookie 的控制权。我对 ASP.NET MVC 的使用并不多,但我确信它可以不是通过 HTML 而是通过属性或其他东西来完成。这是一个非常常见的场景。您应该为您的生产框将 cookie 域设置为“domain.com”,这是正确的。如果您在本地机器上工作,则应将 cookie 域设置为“”。