如何在两个不同的站点中维护相同的会话

时间:2012-05-31 09:57:52

标签: c# sql-server session cross-domain

假设我有两个域

1。 abc.com
 2. xyz.com

现在我想做的事情是我在两个网站上都有一个索引页面,并且在两个索引页面上都有一个图像,但当我点击abc.com中的下一个并且abc.com上的图像更改时同时我在sql server中创建了一个会话变量。现在离开abc.com并转到xyz.com xyz.com的索引页面在2秒后自动获取ajax函数刷新,现在当页面获取刷新时,它将向服务器发出请求并从我们使用abc.com存储的会话中选择下一个图像名称得到我们将在xyz.com上显示最新图像....注意。两个站点都使用相同的服务器

我能这样做吗? 。如果是,那么如何?

1 个答案:

答案 0 :(得分:3)

您可以使用SQL Server作为会话管理器在站点之间共享会话,我按照这些说明进行操作,效果很好。

这些步骤取自:Share ASP.net session between domains

  

ASP.NET应用程序:CSASPNETShareSessionBetweenSubDomains项目   概述

     

要点:

     

会话可以设置为不同的模式(InProc,SqlServer和   StateServer的)。使用SqlServer / SateServer模式时,Session将存储   在特定的SQL Server / Sate服务器中。如果是两个ASP.NET Web应用程序   指定与会话服务器相同的SQL Server,所有会话存储在其中   同一个数据库。总而言之,如果使用SQL Server Session,那就是   可以在不同的ASP.NET应用程序之间共享会话。   由于ASP.NET将Session Id存储到cookie以指定当前Session,   所以为了共享Session,有必要共享Session Id   饼干。

     

CSASPNETShareSessionBetweenSubDomains示例演示了如何操作   配置SessionState Server,然后创建SharedSessionModule   模块实现子域ASP.NET Web之间的共享会话   应用

     

两个ASP.NET Web应用程序需要在相同的根域中运行(可以   使用不同的端口)。步骤进行:

     
      
  1. 配置SQL Server以存储ASP.NET会话状态。

         

    运行“C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_regsql.exe   -S localhost \ sqlexpress -E -ssadd“将会话状态支持添加到Sql Server Express 1

         

    如果在配置时未将会话状态添加到SQL Server   一个使用SQL Server模式会话状态的网站,   将抛出System.Data.SqlClient.SqlException,说“无效   对象名称't​​empdb.dbo.ASPStateTempSessions'。“

  2.   
  3. 配置ASP.NET Web应用程序以使用SQL Server存储会话并使用特定的decryptionKey和validationKey。

         

    将此设置添加到web.config文件以使用SQL Server会话   州:   
         

         

    将此设置添加到web.config以使用特定的decryptionKey和   validationKey的:         

         

    如果您在IIS中托管应用程序,请运行应用程序池   在可以登录数据库的帐户下。除此以外   将抛出System.Data.SqlClient.SqlException,说“不能   打开登录请求的数据库'ASPState'。登录失败。“

  4.   
  5. 编写SharedSessionModule模块以实现共享会话的逻辑

         

    一个。实现Init()方法以设置从中读取的Application Id   web.config中。

         

    湾实现PostRequestHandlerExecute事件以将会话ID存储到   饼干    相同的域和根路径。

  6.   
  7. 配置ASP.NET Web应用程序以使用SharedSessionModule模块。    将此配置添加到web.config以使用SharedSessionModule模块:                                  

         

    如果您在自己的域中运行应用程序(localhost除外),则   请不要忘记更改RootDomain的值   出版。

  8.   
  9. 运行和测试    一个。添加新的网页。湾添加两个按钮(用于刷新页面和设置会话)和一个用于显示的标签    会话价值。 C。在Page_PreRender()方法上,读取Session并在Label中显示它。按钮单击    事件,将值设置为会话。 d。使用与网站1相同的配置创建新网站,但设置不同的值    到会议e。现在在两个选项卡中打开两个站点。现在,如果您在site1中设置会话值,    您可以在site2中检索相同的值。所以他们使用相同的会话。

  10.         

    1从Sql Server中删除会话状态。跑   “C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_regsql.exe -S   localhost \ sqlexpress -E -ssremove“删除会话状态支持   来自Sql Server。