ASP.NET MVC – 跨子域身份validation/成员身份

在实现基于子域的语言切换器时遇到障碍(en.domain.com加载英语,jp.domain.com加载日语)。

如何让单个成员资格系统跨多个子域工作(ASP.NET MVC C#)?

看到有关将domain="domain.com"添加到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); 

詹姆士

你必须使用点前缀,就像这样。

    

您的问题是浏览器在请求期间如何发送cookie。

Cookie通常绑定到单个域,这是出于安全原因和性能。 例如,用户不希望将域名的cookie发送到任何其他域,因为您的cookie可能包含敏感信息。

浏览器可以区分使用en.domain.com和jp.domain.com设置的cookie。 他们不允许来自一个域的cookie转到另一个域,因为它们不在父域中。

解决问题的方法是接管生成cookie的控制权。 我没有玩过ASP.NET MVC,但我确信它不是通过HTML而是通过属性或其他东西来完成的。 这是一种非常常见的情况。 您应该为生产箱将cookie域设置为“domain.com”,这是正确的。 如果您正在使用本地方框,则应将cookie域设置为“”。