11

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

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

看到一些关于添加domain="domain.com"<forms >web.config 中的条目的内容。做到了,但是在本地 Visual Studio 开发 Web 服务器上进行测试时是否有效?

4

3 回答 3

8

尝试自己创建 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);

詹姆士

于 2009-07-25T09:55:26.993 回答
4

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

<authentication mode="Forms">
    <forms domain=".tv.loc" loginUrl="~/signin" timeout="2880" name="auth" />
</authentication>
于 2010-06-30T15:46:53.390 回答
0

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

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

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

您的问题的解决方案是接管生成 cookie 的控制权。我对 ASP.NET MVC 的使用并不多,但我确信它可以不是通过 HTML 而是通过属性或其他东西来完成。这是一个非常常见的场景。您应该为您的生产框将 cookie 域设置为“domain.com”,这是正确的。如果您在本地机器上工作,则应将 cookie 域设置为“”。

于 2009-07-25T08:50:23.427 回答