在实施sub domain based language switcher时遇到障碍(en.domain.com加载英文,jp.domain.com加载日文)。
如何让单个成员资格系统跨多个子域工作(ASP.NET MVC C#)?
看到有关在web.config中添加domain="domain.com"
到<forms >
条目的内容。这样做了,但在本地Visual Studio开发Web服务器上进行测试时是否有效?
答案 0 :(得分:7)
尝试自己创建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);
詹姆斯
答案 1 :(得分:3)
你必须使用点前缀,就像这样。
<authentication mode="Forms">
<forms domain=".tv.loc" loginUrl="~/signin" timeout="2880" name="auth" />
</authentication>
答案 2 :(得分:0)
您的问题是浏览器在请求期间发送Cookie的方式。
Cookie通常绑定到单个域,这是出于安全原因和性能。例如,用户不希望将域名的cookie发送到任何其他域,因为您的cookie可能包含敏感信息。
浏览器会区分使用en.domain.com和jp.domain.com设置的Cookie。他们不允许来自一个域的cookie转到另一个域,因为它们不在父域中。
解决问题的方法是接管生成cookie的控制权。我没有玩过ASP.NET MVC,但我确信它不是通过HTML而是通过属性或其他东西来完成的。这是一种非常常见的情况。您应该为生产箱将cookie域设置为“domain.com”,这是正确的。如果您正在使用本地方框,则应将cookie域设置为“”。