2012-05-31 41 views
1

保持相同的会话让假设我有两个域如何在两个不同的地点

1 abc.com
2. xyz.com

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

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

回答

3

您可以在使用SQL Server作为会话管理器的站点之间共享会话,我按照这些说明做了它,运行良好。 Share ASP.net session between domains

ASP.NET应用:CSASPNETShareSessionBetweenSubDomains项目 概述

总结:

会话可以被设置为不同的模式(是InProc,SQLSERVER,和

这些步骤取自StateServer的)。当使用SqlServer/SateServer模式时,Session将在特定的SQL Server/Sate Server中存储 。如果两个ASP.NET Web应用程序 指定与会话服务器相同的SQL Server,则所有会话都将在 中存储相同的数据库。总而言之,如果使用SQL Server Session,则可能会在不同的ASP.NET应用程序之间共享Session的 。 由于ASP.NET将会话ID存储到cookie以指定当前会话,所以为了共享Session,需要在 中共享会话Id的cookie。

的CSASPNETShareSessionBetweenSubDomains示例演示如何 配置一个SessionState的服务器,然后创建一个SharedSessionModule 模块来实现子域的ASP.NET Web 应用程序之间共享会话。

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

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

    运行 “C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ aspnet_regsql.exe的 -S本地主机\ SQLEXPRESS -E -ssadd” 添加会话状态的支持到SQL Server Express 1

    如果你还没有加入会话状态到SQL Server,在配置 网站使用SQL Server模式会话状态, System.Data.SqlClient.SqlException将被抛出话说“无效 对象名称“的tempdb .dbo.ASPStateTempSessions'。“

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

    添加此设置web.config文件中使用SQL服务器会话状态 :

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

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

  3. 写SharedSessionModule模块来实现的共享会话

    一个逻辑。实现Init()方法来设置从 web.config中读取的应用程序ID。

    b。实施PostRequestHandlerExecute事件以将会话Id存储到 Cookie与 相同的域和根路径。

  4. 配置ASP.NET Web应用中使用SharedSessionModule模块。 此配置添加到web.config中使用SharedSessionModule模块:

    如果您在本地主机除了你自己的域的应用,
    请不要忘记之后 出版改变RootDomain的价值。

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

1从Sql Server中删除会话状态。运行 “C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ aspnet_regsql.exe的-S 本地主机\ SQLEXPRESS -E -ssremove” 从SQL Server删除会话状态的支持 。

相关问题