知识大全 Session共享的解决方案
Posted 属性
篇首语:青春须早为,岂能长少年。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Session共享的解决方案相关的知识,希望对你有一定的参考价值。
Session共享的解决方案 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
客户端SessionID值唯一
对于不同的域名 主域名 子域名 跨站点域名或跨服务器域名 用户在打开页面时会产生不同的SessionID
为了使这些站点在用户登录时只登录一次 那我们就要解决SessionID的问题 必须使SessionID在这些共享Session的站点中只产生一次 而SessionID是存储在客户端的cookie之中键值为ASP NET_SessionId的一个字符串(也可以存储在URL中 这里不作使介绍) 为此只须使各站点存储的SP NET_SessionId唯一即可
因每个客户端在打开时会产生一个SessionID 为此我们要做的就是重置SessionID 我们可以在继承HttpModule 在结束请求时重写SessionID
代码如下
public class MakeSessionIDOneOnly : IHttpModule private string m_RootDomain = string Empty; #region IHttpModule Members public void Dispose() public void Init(HttpApplication context) m_RootDomain = ConfigurationManager AppSettings[ RootDomain ]; Type stateServerSessionProvider = typeof(HttpSessionState) Assembly GetType( System Web SessionState OutOfProcSessionStateStore ); FieldInfo uriField = stateServerSessionProvider GetField( s_uribase BindingFlags Static | BindingFlags NonPublic); if (uriField == null) throw new ArgumentException( UriField was not found ); uriField SetValue(null m_RootDomain); context EndRequest += new System EventHandler(context_EndRequest); void context_EndRequest(object sender System EventArgs e) HttpApplication app = sender as HttpApplication; for (int i = ; i < app Context Response Cookies Count; i++) if (app Context Response Cookies[i] Name == ASP NET_SessionId ) app Context Response Cookies[i] Domain = m_RootDomain; #endregion
为使用以上代码 须配置下面节点项
<Modules>
<add name= 节点名称 type= 类名全称 程序集 />
</Modules>
Session值的共享
配置sessionState置节点 使用StateServer或SQLServer来实现Session共享
为实现跨服务器共享 必须在nfig配置
<machineKey decryptionKey= FD B EB A E F E E AA BF B F validationKey= F C A DD FCD FD A EF FD E AB FCDFE F FA A E B A E A CBB DB D A BBCEA DCA CBC C validation= SHA decryption= Auto />
并且 不同服务器上站点配置必须用相同的nfig 各站点目录配置也要相同
使用StateServer
存储Session的服务器必须开启StateServer ASP NET状态服务 只有机器重起的情况下才导致Session丢失
<sessionState cookieless= false timeout= mode= StateServer stateConnectionString= tcpip=IpAddress: />
若StateServer在本机存储 则IpAddress为 若StateServer为远程服务器 则为IpAddress为远程服务器IP地址 并且修改注册表项如下
Windows Registry Editor Version
[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\aspnet_state\\Parameters]
Port =dword: a b
AllowRemoteConnection =dword:
使用SQLServer
必须开启SQLServer代理服务 此服务负责清除过期的Session 若没有开服务 则Session不会过期
使用SQLServer在机器重启后Session不会丢失
nfig配置
<sessionState mode= SQLServer sqlConnectionString= server=DBIpAddress; uid=myid; pwd=mypwd; />
数据库配置
使用aspnet_regsql exe工具
ASP NET 版本后微软提供了aspnet_regsql exe工具可以方便的配置Session数据库 该工具位于 Web 服务器上的 系统根目录\\Microsoft NET\\Framework\\版本号 文件夹中
使用举例:
aspnet_regsql exe S U sa P ssadd sstype p
S参数:
表示数据库实例名称 可以用 表示本机
U和 P参数:
表示用户名和密码
E参数:
可以再 U –P 与 E中选择一组 –E表示以当前系统用户通过windows身份验证登录数据库 U P则是使用SqlServer用户登录数据库
ssadd / –ssremove 参数:
ssadd表示是添加Session数据库 ssremove表示移除Session数据库
sstype 参数说明:
t
将会话数据存储到 SQL Server tempdb 数据库中 这是默认设置 如果将会话数据存储到 tempdb 数据库中 则在重新启动 SQL Server 时将丢失会话数据
p
将会话数据存储到 ASPState 数据库中 而不是存储到 tempdb 数据库中
c
将会话数据存储到自定义数据库中 如果指定 c 选项 则还必须使用 d 选项包括自定义数据库的名称
sessionState参数说明
属性
说明
allowCustomSqlDatabase
可选的 Boolean 属性
指定会话状态 SQL 数据库是否可以是自定义数据库(而不是 ASP NET 默认数据库) 如果为 false 则不能指定初始目录或数据库作为 sqlConnectionString 属性的值 默认会话状态 SQL 数据库为 ASPState 数据库 有关更多信息 请参见会话状态模式
此属性是 NET Framework 版中的新属性
默认值为 false
cookieless
可选的 HttpCookieMode 属性
指定对于 Web 应用程序使用 Cookie 的方式
cookieless 属性可以为下列可能值之一 默认值为 UseCookies
值
说明
AutoDetect
ASP NET 确定请求浏览器或请求设备是否支持 Cookie 如果请求浏览器或请求设备支持 Cookie 则 AutoDetect 使用 Cookie 来保留用户数据 否则 将在查询字符串中使用一个标识符 如果浏览器或设备支持 Cookie 但当前禁用了 Cookie 则请求功能仍会使用 Cookie
UseCookies
无论浏览器或设备是否支持 Cookie 都使用 Cookie 来保留用户数据
UseDeviceProfile
ASP NET 根据 HttpBrowserCapabilities 设置来确定是否使用 Cookie 如果 HttpBrowserCapabilities 设置指示浏览器或设备支持 Cookie 将使用 Cookie 否则 将在查询字符串中使用一个标识符
UseUri
无论浏览器或设备是否支持 Cookie 调用功能都使用查询字符串来存储标识符
cookieName
可选的 String 属性
指定存储会话标识符的 Cookie 的名称
此属性是 NET Framework 版中的新属性
默认值为 ASP NET_SessionId
customProvider
可选的 String 属性
指定用于存储和检索会话状态数据的自定义会话状态提供程序的名称 该提供程序在 providers 元素中指定 仅当会话状态模式设置为 Custom 值时 才使用该提供程序 有关更多信息 请参见会话状态模式
此属性是 NET Framework 版中的新属性
默认值为空字符串 ( )
mode
可选的 SessionStateMode 属性
指定存储会话状态值的位置 有关更多信息 请参见会话状态模式
mode 属性可以为下列可能值之一 默认值为 InProc
值
说明
Custom
会话状态将使用自定义数据存储区来存储会话状态信息
InProc
会话处于正在处理 ASP NET 辅助进程的状态
Off
会话状态被禁用
SQLServer
会话状态将使用进程外 SQL Server 数据库来存储状态信息
StateServer
会话状态将使用进程外 ASP NET 状态服务来存储状态信息
partitionResolverType
可选的 String 属性
指定在哪里存储会话状态 如果 partitionResolverType 属性中指定了值 则忽略 sqlConnectionString 和 stateConnectionString 属性 PartitionResolverType 属性返回的连接字符串将用于每个请求 为请求的其余部分连接到适当的服务器位置 如果连接字符串无效 ASP NET 将引发一个异常 该异常与当配置的服务器连接字符串无效时引发的异常相同 该属性用于在 SQL 或状态服务器模式下在多个后端节点上划分会话状态数据
此属性是 NET Framework 版中的新属性
默认值为空字符串
regenerateExpiredSessionId
可选的 Boolean 属性
指定当客户端指定了过期的会话 ID 时是否重新发出会话 ID 默认情况下 当启用了 regenerateExpiredSessionId 时 仅为 cookieless 模式重新发出会话 ID 有关更多信息 请参见 IsCookieless
此属性是 NET Framework 版中的新属性
默认值为 true
sqlCommandTimeout
可选的 TimeSpan 属性
指定使用 SQL Server 会话状态模式的 SQL 命令的持续时间超时(秒) 持续时间超时是 SQL 命令可以处于空闲状态的时间(秒) 超过此时间之后 该命令将被取消
此属性是 NET Framework 版中的新属性
默认值为 : : ( 秒)
sqlConnectionString
可选的 String 属性
为运行 SQL Server 的计算机指定连接字符串 该属性在 mode 属性设置为 SQLServer 值时是必需的 有关更多信息 请参见会话状态模式
注意
若要在使用 SQLServer 模式时提高您的应用程序的安全性 请使用受保护的配置来加密配置的 sessionState 节 以帮助保护 sqlConnectionString 值
默认值为 data source= ;Integrated Security=SSPI
stateConnectionString
可选的 String 属性
指定远程存储会话状态的服务器名称或地址以及端口 端口值必须为 当 mode 为 StateServer 值时 该属性是必需的 确保运行 ASP NET 状态服务的服务器是存储会话状态信息的远程服务器 该服务随 ASP NET 一起安装 默认情况下为 %SystemRoot%\\Microsoft NET\\Framework\\VersionNumber\\aspnet_state exe 有关更多信息 请参见会话状态模式
注意
若要在使用 StateServer 模式时提高您的应用程序的安全性 请使用受保护的配置来加密配置的 <sessionState> 节 以帮助保护 stateConnectionString 值
默认值为 tcpip= :
stateNeorkTimeout
可选的 TimeSpan 属性
指定 Web 服务器与状态服务器之间的 TCP/IP 网络连接可以处于空闲状态的时间(秒) 超过此时间后 请求将被取消 该属性在 mode 属性设置为 StateServer 值时使用
默认值为 秒
timeout
可选的 TimeSpan 属性
指定在放弃一个会话前该会话可以处于空闲状态的分钟数 对于进程内和状态服务器模式 timeout 属性不能设置为大于 分钟( 年)的值
会话 timeout 配置设置仅适用于 ASP NET 页 更改会话 timeout 值不会影响 ASP 页的会话超时时间 同样 更改 ASP 页的会话超时时间不会影响 ASP NET 页的会话超时时间
默认值为 分钟
useHostingIdentity
可选的 Boolean 属性
指定会话状态将恢复为宿主标识还是使用客户端模拟
如果为 true ASP NET 将使用下列进程凭据之一来连接会话状态存储区
宿主进程 对于 Microsoft Internet 信息服务 [IIS] 和 版为 ASPNET 对于 Microsoft Windows Server 则为 NEORK SERVICE
应用程序模拟标识 当使用了以下配置时使用此凭据
<identity impersonate= true userName= user password= pwd />
如果为 false ASP NET 将使用目前与当前请求的操作系统线程关联的凭据来连接会话状态存储区 对于客户端模拟 ASP NET 将使用与浏览器协商的安全凭据来连接会话状态存储区 如果为 false ASP NET 在连接会话状态存储区时不会恢复为进程标识或应用程序模拟标识 有关更多信息 请参见 ASP NET 模拟
此属性是 NET Framework 版中的新属性
默认值为 true
注意
在 NET Framework 版中 如果 mode 属性设置为 SQLServer 并且客户端模拟有效 则 ASP NET 使用来自 ASP NET 客户端模拟的客户端凭据连接到运行 SQL Server 的计算机
继承的属性
可选的属性
由所有节元素继承的属性
cha138/Article/program/net/201311/11956相关参考
Asp.Net处理Session失效解决方案 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 检查
知识大全 ASP.NET Session丢失问题原因及解决方案
ASP.NETSession丢失问题原因及解决方案 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 ie与session丢失(新窗口cookie丢失)实测及解决方案
正如标题所言测试结果为如果cookie设置是延后定时失效而非进程级的那在open后也能看到所以针对此情况防止用户在使用ie内核出现登录状态丢失可以配合cookie来使用 今天在一个群中有
.NET4并行编程之共享数据问题和解决概述 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在开始
知识大全 现在发现联通宽频限制多台终端共享上网的使用,但是家里面又有两台电脑,这问题该如何解决的好
现在发现联通宽频限制多台终端共享上网的使用,但是家里面又有两台电脑,这问题该如何解决的好!应该是准备限制一条网线多台电脑上了想要钱了我的也经常出现了如何解决一个宽频账号多台电脑共享上网?用路由器啊,连
《会计改革与发展“十四五”规划纲要》提出,要探索建立( )联合解决问题机制,加强信息共享与沟通,提高企业会计准则执行效果。
会计改革与发展十四五规划题目:《会计改革与发展“十四五”规划纲要》提出,要探索建立()联合解决问题机制,加强信息共享与沟通,提高企业会计准则执行效果。A、法治化B、现代化C、制度化D、常态化参考答案:
知识大全 同一个OA系统被多个地方使用,现在想让这几个系统实现“资源共享,互联互通”该怎么解决,感谢回复
同一个OA系统被多个地方使用,现在想让这几个系统实现“资源共享,互联互通”该怎么解决,感谢回复! 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集
微软企业方案Solomon集团表示它计划采用MicrosoftPermissiveLicense方式将其PortalLite软件的源代码发布到GotDotNet网站上 该软件使人们能够通过包
如果程序中没有设置session的过期时间那么session过期时间就会按照IIS设置的过期时间来执行IIS中session默认过期时间为分钟IIS中session时间可以更改 如果
先说session 对SESSION的争论好象一直没有停止过不过幺麽能理解SESSION的人应该占以上但还是讲讲别嫌老~ 有一些人赞