如何解决session共享

2024-10-15 17:52:07

1、客户端SessionID值唯一; 对于不同的域名:主域名、子域名、跨站点域名或跨服务器域名,用户在打开页面时会产生不同的SessionID 为了使这些站点在用户登录时只登录一次,那我们就要解决SessionID的问题,必须使SessionID在这些共享Session的站点中只产生一次。而SessionID是存储在客户端的cookie之中键值为ASP.NET_SessionId的一个字符串(也可以存储在URL中,这里不作使介绍),为此只须使各站点存储的SP.NET_SessionId唯一即可。

如何解决session共享

3、Session值的共享;配置sessionState置节点,使用StateServer或SQLServer来实现Session共享。为实现跨服务器共享,必须在Web.config配置:<machineKey decryptionKey="FD69B2EB9A11E3063518F1932E314E4AA1577BF0B824F369" validationKey="5F32295C31223A362286DD5777916FCD0FD2A8EF882783FD3E29AB1FCDFE931F8FA45A8E468B7A40269E50A748778CBB8DB2262D44A86BBCEA96DCA46CBC05C3" validation="SHA1" decryption="Auto"/>并且,不同服务器上站点配置必须用相同的Web.config,各站点目录配置也要相同。

如何解决session共享

5、使用SQLServer:必须开启SQLServer代理服务,此服务负责清除过期的Session,若没有开服务,则Session不会过期。使用SQLServer在机器重启后Session不会丢失。Web.config配置:<sessionState mode="SQLServer" sqlConnectionString="server=DBIpAddress; uid=myid; pwd=mypwd;"/>

如何解决session共享

7、可选的 TimeSpan 属性。指定在放弃一个会话前该会话可以处于空闲状态的分钟数。对于进程内和状态服务器模式,timeout 属性不能设置为大于 525,601 分钟(1 年)的值。会话 timeout 配置设置仅适用于 ASP.NET 页。更改会话 timeout 值不会影响 ASP 页的会话超时时间。同样,更改 ASP 页的会话超时时间不会影响 ASP.NET 页的会话超时时间。默认值为 20 分钟。useHostingIdentity可选的 Boolean 属性。指定会话状态将恢复为宿主标识还是使用客户端模拟。如果为 true,ASP.NET 将使用下列进程凭据之一来连接会话状态存储区:宿主进程;对于 Microsoft Internet 信息服务 [IIS] 5 和 5.1 版为 ASPNET,对于 Microsoft Windows Server 2003 则为 NETWORK SERVICE。应用程序模拟标识,当使用了以下配置时使用此凭据:<identity impersonate="true" userName="user" password="pwd" />如果为 false,ASP.NET 将使用目前与当前请求的操作系统线程关联的凭据来连接会话状态存储区。对于客户端模拟,ASP.NET 将使用与浏览器协商的安全凭据来连接会话状态存储区。如果为 false,ASP.NET 在连接会话状态存储区时不会恢复为进程标识或应用程序模拟标识。有关更多信息,请参见 ASP.NET 模拟。此属性是 .NET Framework 2.0 版中的新属性。默认值为 true。注意在 .NET Framework 1.1 版中,如果 mode 属性设置为 SQLServer,并且客户端模拟有效,则 ASP.NET 使用来自 ASP.NET 客户端模拟的客户端凭据连接到运行 SQL Server 的计算机。继承的属性可选的属性。由所有节元素继承的属性。

如何解决session共享
猜你喜欢