在子域上共享会话状态

时间:2011-05-16 19:33:27

标签: asp.net session web-config session-state

我阅读了数千篇文档,但对我来说没什么用。

1)我想要的是:在我的服务器端,我使用了以下变量:

(string)Session["myData"]

2)当我更改子域

www.myDomain.com/myPage.aspx
OR
myDomain.com/myPage.aspx
OR
myUser.myDomain.com/myPage.aspx

我的问题:当我从其中一个域转到另一个域时,我丢失了会话数据。

3)我想仅使用cookie和inproc模式保持会话状态:

  <sessionState mode="InProc" cookieless="UseCookies"  cookieName="myDomain.com" timeout="10000">     </sessionState>
  <authentication mode="Windows"/>

我在web.config中添加了

<httpCookies domain="myDomain.com"  />

 <httpCookies domain=".myDomain.com"  />  

 <httpCookies domain=".myDomain.com" httpOnlyCookies="true" />

但没有任何效果。

感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

简短回答,您无法满足所有标准。

可能的解决方案:

  • 将传入域名为“xxx.myDomain.com”的任何请求重定向到公共“www.myDomain.com”。这可能涉及将“myUser.myDomain.com”更改为“www.myDomain.com/default.aspx?&user=myUser”。因为它是一个重定向,你的用户会看到他的栏中的地址发生变化,因此会对你网站背后的香肠制作有所了解(对攻击者有用)。
  • 永远不要在您自己的网站中明确引用您的域名。所有URI都应该相对于Web结构的根目录。这应该允许您避免更改域,从而丢失会话状态。
  • 使用SQLServer管理会话状态:http://support.microsoft.com/kb/2527105。这将需要将会话处理从使用Cookie的InProc更改为SQLServer,以及其他一些配置更改。