我拼命寻找这两天的解决方案,但所有的轨道都没有定论。
我的网站包含A.mysite.com和B.mysite.com等子域名, 我需要在所有子域和域之间共享会话。
我确切地说,问题不在于跨越不同的服务器,而是在同一个应用程序中保持会话在子域之间保持活动。
任何想法都会非常感激。
答案 0 :(得分:0)
您可以利用会话状态服务器中的构建来实现此目的。
这样做可以让您将网站指向sql server数据库,以便持久保存会话状态而不是内存。所有服务器都可以像通常一样使用会话,无缝地使用相同的设施。
只更改了web.config文件,并使用aspnet_regsql.exe工具设置数据库工具。
要使用aspnet_regsql.exe设置数据库,命令行args如下所示;
-S指定要在其中存储会话状态的SQL服务器的IP地址或名称。
-U指定连接到SQL Server时要使用的用户ID
-P指定连接到SQL Server时要使用的密码
-E表示您希望在连接到SQL Server时使用集成安全性
-ssadd添加对SQLServer模式会话状态的支持
-ssremove删除对SQLServer模式会话状态的支持
-sstype会话状态支持的类型。此选项可以是:
t用于临时存储
p for persistent storage
c用于自定义存储
-d如果-sstype开关为“c”
,则使用的自定义数据库的名称您将使用以下语法更新web.config文件;
<sessionState
mode="SQLServer"
sqlConnectionString="data source=MyDbServer;user id=<username>;password=<strongpassword>"
cookieless="false"
timeout="20"
/>
以下是一些关于如何实现这一目标的好文章。
http://idunno.org/articles/277.aspx
http://support.microsoft.com/kb/317604
由于您的主要问题是确保两个子域中的SessionID相同,我认为您在这里是全局Application_PreRequestHandlerExecute事件。您可以检查子域A中是否存在会话cookie,并将B子域中的ID设置为相同的ID。 见这里的帖子; http://www.know24.net/blog/ASPNET+Session+State+Cookies+And+Subdomains.aspx