跨子域共享会话和sessionID(MVC 3)

时间:2011-08-05 03:58:00

标签: .net model-view-controller subdomain sessionid

我拼命寻找这两天的解决方案,但所有的轨道都没有定论。

我的网站包含A.mysite.com和B.mysite.com等子域名, 我需要在所有子域和域之间共享会话。

我确切地说,问题不在于跨越不同的服务器,而是在同一个应用程序中保持会话在子域之间保持活动。

任何想法都会非常感激。

1 个答案:

答案 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

http://www.developer.com/net/asp/article.php/3595766/Storing-Session-State-in-a-SQL-Server-Database.htm

由于您的主要问题是确保两个子域中的SessionID相同,我认为您在这里是全局Application_PreRequestHandlerExecute事件。您可以检查子域A中是否存在会话cookie,并将B子域中的ID设置为相同的ID。 见这里的帖子; http://www.know24.net/blog/ASPNET+Session+State+Cookies+And+Subdomains.aspx