一个服务器上布了两个网站,但这两个网站能交互操作,就是修改了一个网站的用户信息的同时也同步修改了另一个网站的用户信息,我的需求是一个网站登陆后,点链接时能登陆另一个网站的会员中心,我现在的问题是HttpContext.Current.Request.Cookies["User"].Value,这个值在一个网站有值的话,但是另一个网站取值时却为null,怎么解决呀?Cookie.net

解决方案 »

  1.   

    同域的网站可以共享cookie。
    不同域的就得另外想办法了。
      

  2.   

    引用李天平先生的博客:简介对于大多数的web应用程序,很多人喜欢采用表单验证的方法。当许多应用程序运行在一个主域下面的多个子域时,使用单点登录将是很不错的一个选择,当用户在www.exapmle.com登录之后,可以访问everything.example.com的资源。表单验证默认不支持这种特性,但是,通过合适的方法调整它并不复杂。ASP.NET表单验证的技术内幕并不复杂:它创建了一个特殊的Cookie,这个cookie的名字由web.config中的forms元素的name定义,它包含加密的验证数据,该cookie默认的名字是.ASPXAUTH。出于保护用户隐私和安全的原因,cookie默认和主机名关联。但是cookie的机制支持一台主机的cookie在该主机所在的域内被接受,意味着主机server1.example.com的cookie可以在整个example.com中使用。可以设置二级域和三级域的cookie,但是不允许设置顶级域的cookie,例如设置.com的cookie就是不允许的。下面开始进行设置,看需要进行什么工作。开始设置和其它的应用程序一样,必须先在system.web中设定authentication,例如:  http://WebLogin/Default.aspx"
        protection="All"/>
    正如前边提到的,验证的cookie是加密的,而加密的种子是随机产生的。当需要多个服务器协同工作时,那么将需要相同的加密种子。在system.web中加入如下的一段:
      validationKey="BD52058A3DEA473EA99F29418689528A494DF2B00054BB7C" 
      decryptionKey="684FC9301F404DE1B9565E7D952005579E823307BED44885" 
    />
    如果采用DES加密的话,使用16个16进制符号,如果使用SHA1加密的话,使用48个16进制符号,ASP.NET默认采用的SHA1加密。开始登录验证必须在将验证cookie发送给客户之前,为cookie附加域信息,代码如下(假定用户名和密码已经经过验证并且使用的用户名存储在userName变量中):
    HttpCookie authCookie = FormsAuthentication.GetAuthCookie(userName, false);
    authCookie.Domain = "example.com";
    Response.Cookies.Add(authCookie);
    Response.Redirect(FormsAuthentication.GetRedirectUrl(userName, false);注销通常,用户注销时不需要进行什么设定,只要调用FormsAuthentication.SignOut()即可,但是这个函数不能处理域的cookie。
    因此,应该手工删除这个cookie,手工删除这个cookie的唯一方法是将cookie的过期时间设定为过去的时间,参考如下的代码:
    HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
    authCookie.Domain = "example.com";
    authCookie.Expires = DateTime.Now.AddDays(-1);
    Response.Cookies.Add(authCookie);好了,现在你的应用程序可以进行单点登录了。
      

  3.   

    domain 填   .一级域名.com
      

  4.   

    我现在自己想了一个解决方案,就是a站登陆时,把cookie生成,点击跳转到b站时,b站通过jquery异步获取到a站的这个cookie值, 但是我现在有一个问题就是a站通过异步能获取到这个值,但是我在javascript中给b站cookie赋值,方法如下document.cookie = "User=" + data.UserCookie;但是在b站别的页面后台却获取不到这个值,方法如下HttpContext.Current.Request.Cookies["User"].Value,为什么呀?求指点