一、什么是Session?
简单来说,就是用户与网站服务器建立的一个连接,服务器分配给一个编号。当一台WWW服务器运行时,可能有若干用户正在浏览运行在这台服务器上
的网站。当用户首次与这台WWW服务器创建连接的时候,它就和这台服务器建立了一个Session,同时服务器会自动为其分配一个SessionID,用来标识
这个用户的唯一身份,也就是不同的客户端会生成不同的Session对象。存储在对话状态变量中的数据,存在的周期相对较短。实际上SessionID
是由WWW服务器随机产生的一个由24个字符组成的字符串。
二、Session的具体使用
1、Web.Config文件中的Session配置
mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false" timeout="20" />
2、必须包含的属性定义
mode:设置将Session信息存储到哪里,有四种方式:
Off:设置不使用Session功能。
InProc :将Session存储在IIS进程内,这是默认值,也最常用(优点是简单,性能最高。但是当重启IIS服务器时Session丢失。);。
StateServer :将Session存储在ASP.NET状态服务进程中(重新启动Web应用程序时保留会话状态,并使会话状态可以用于网络中的多个Web服务器)。
SQLServer :将Session存储在SQL Server中(存储在内存和磁盘中,服务器挂掉重启后都还在)。
3、可选属性的定义
cookieless:获取或设置一个值,该值指示是否使用 cookie 来标识客户端会话。
true 如果所有的请求会为无 cookie,或 false 如果没有请求会为无 cookie,或其中一个 HttpCookieMode 值。
ASP.NET 2.0 版中的默认值是 AutoDetect。 在早期版本中,默认值是 false。
timeout:设置经过多少分钟后服务器自动回收Session信息,默认为20分钟
stateConnectionString:在远程存储会话状态时,此属性指定服务器名称和端口。 stateConnectionString 时,属性是必选项 Mode 设置为 StateServer。
sqlConnectionString:设置为sqlConnectionString 时,属性是必选项 Mode 设置为 SQLServer。
stateNetworkTimeout:获取或设置 Web 服务器和状态服务器之间的网络连接可以保持空闲的时间量。
属性值:
Type: System.TimeSpan
以秒为单位,Web 服务器和状态服务器之间的网络连接可保持空闲状态,放弃该会话前的时间。 默认值为 10 秒。
设置为 sessionStateSection 时,属性是必选项 Mode 属性设置为 StateServer。
3、Session用法示例
例如:Session["userName"]="小明";//存储信息
string name=session["userName"];//取值
Session。Clear();//从Session状态集合中移除所有的键和值
Session.Abandon();//取消当前Session会话
三、Session的运行原理图解
四、Session与Cookie的区别
1、cookie存客户端,session存服务端。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
五、常见的Session超时和丢失的情况以及解决方法
1、服务器内存补充导致Seesion丢失;解决方法:IIs设置Session超时时间,重新设置会话时间,默认为20 min。
2、杀毒软件扫描Web.cofig;解决方法:设置杀毒软件不扫描Web.cofig配置文件。
3、程序内部有让Session丢失的代码;解决方法:检查代码处理。
4、程序有框架页面和跨域情况;解决方法:在Window服务中将ASP.NET State Service 启动。
欢迎关注我的公众号(同步更新文章):DoNet技术分享平台