ASP.NET Session篇
1. Session 丢失问题
先看下 Session 的存储方式 asp.net有3种存储方式,:inproc, sqlserver,stateserver
在哪里设置呢 “web.config” 中有
cookieless="true|false"
timeout="number of minutes"
stateConnectionString="tcpip=server:port"
sqlConnectionString="sql connection string"
stateNetworkTimeout="number of seconds"
/>
Off 不使用Session功能
InProc 将Session存储在进程内,就是ASP中的存储方式,这是默认值。
StateServer 将Session存储在独立的状态服务中。
SQLServer 将Session存储在SQL Server中。
可选的属性:
cookieless :客户端是否以cookie的方式存储session
ture 使用Cookieless模式 不以cookie的方式存储,
(注意:如果不以cookie的方式存储,客户端是如何判断用户是否登录的呢,“url”,ASP.NET 将session通过url地址传递给浏览器客户端。
例如: )
false 使用Cookie模式,这是默认值。 使用cookie时就不需要改变URL地址了。
timeout 经过多少分钟后Session会删除。默认为30分钟 ,即session超时时间
stateConnectionString 设置将Session信息存储在状态服务中时使用的服务器名称和端口号,例如:"tcpip=127.0.0.1:42424”。当mode的值是StateServer是,这个属性是必需的。
特别说一下这个状态服务:Session默认存储在InProc 中即ASP.NET进程中,一旦进程出现问题 Session就会丢失,所有我们通常不选择默认的存储方式,剩下的几种,个人认为比较简单的还是通过状态服务控制,
这里所谓的服务在哪里呢:下图 服务-ASP.NET状态服务,如果使用该服务控制Session则需将服务设置为自动启动,TCPID:127.0.0.1 后面的42424是默认端口,如果该端口不能用则需要修改注册表。
sqlConnectionString 设置与SQL Server连接时的连接字符串。例如"data source=localhost;Integrated Security=SSPI;Initial Catalog=northwind"。当mode的值是SQLServer时,这个属性是必需的。
stateNetworkTimeout 设置当使用StateServer模式存储Session状态时,经过多少秒空闲后,断开Web服务器与存储状态信息的服务器的TCP/IP连接的。默认值是10秒钟。
地址转移引发的的问题:
在浏览器中浏览时会自动增加session地址,即地址转移,但在socket通信(TCP)时会出现302错误 此时需要获取转移后的地址方能正确访问。