在开发中通过webconfig配置session的时长,了解到session是有多种模式的,所以总结一下。
一、session是web中的会话,因为http是不保存状态的无状态协议,所以浏览器请求服务器产生响应,如果同一个浏览器再一次请求,服务器不知道请求是谁,没有保存状态。通过使用session会话的机制,在第一次请求的时候服务器生成唯一的session信息返回给浏览器,浏览器再次访问时候带上session信息在服务器进行查找会话,实现有状态的响应,其中session可以保持在浏览器的cookie中达到保存标识的作用。
二、session的模式
1、InProc(默认类型,存储在内存中)
在webconfig中进行配置<sessionState mode="InProc" timeout="30" />其中timeout是session的过期时间,该模式也是默认模式,其过期时间默认20分钟,session存储在内存中。
优缺点:最快,最通用的默认形式,对象不需要进行序列化和反序列化存储(内存的形式),IIS重启或者工作进行被回收会失去session,session数据过大或者过多,影响内存的性能。
2、StateServer(asp.net_state.exe服务中)使用一个独立的Windows服务提供session服务,独立于IIS,可以使用单独一台服务器。
首先要开启asp.net_state.exe服务,并且在注册表中设置为自启动。然后在webconfig中进行配置<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" stateNetworkTimeout="40" />。
优缺点:数据可以在不同应用程序上共享,性能瓶颈,数据要序列化和反序列化,两个不同的进程,进行通信读写消耗性能。
3、SQLServer(存储在sql server数据库中)
session保存在数据库中,通过在sqlserver创建session存储的数据库表,创建session是会在表中保存一条session的数据,过期时间等。
通过命令在数据库创建session数据库C:\Windows\Microsoft.NET\Framework\v4.0.30319\ aspnet_regsql -S DESKTOP-51KBM4A\SA -U sa -P 123456 -ssadd -sstype p
在webconfig中进行配置<sessionState mode="SQLServer" sqlConnectionString="data source=DESKTOP-51KBM4A\SA;user id=sa;password=123456" cookieless="false" timeout="20"></sessionState>
优缺点:session不受IIS重启的影响,不会因为IIS重启失去session,最可靠和安全的session模式,数据共享,对象的序列化和反序列化影响性能。
4、Off(关闭session )
<sessionState mode="Off"/>
5、自定义Session模式