查看: 98|回复: 0

Asp.net 中Session的使用

[复制链接]

4

主题

8

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2023-6-5 15:39:16 | 显示全部楼层 |阅读模式
在使用http://asp.net进行网页开发时,登录之后一般需要对登录信息进行缓存。而Session可以很好的解决登录信息存储的问题,并且能够有效的保证数据的安全性,能够进行有效地会话控制。Session是将数据存储在服务器当中,是一种基于后端有别于数据库的临时存储数据的技术,当然Session也可以存储在数据库当中。
Session能够存储任何类型的对象,这个Session的使用带来的极大的方便。存储时:
HttpContext.Current.Session["TEST"] = users;
读取时:
Users user = HttpContext.Current.Session["TEST"] as Users;
Session的配置

Session共有3种配置模式
    <sessionState mode="Off|InProc|StateServer|SQLServer"
              cookieless="true|false"
              timeout="number of minutes"
              stateConnectionString="tcpip=server:port"
              sqlConnectionString="sql connection string"
              stateNetworkTimeout="number of seconds" />
第一种InProc直接使用IIS进行进行Session状态的管理,性能优秀,但同时也有缺点。最大的缺点就是状态容易丢失,以下几种情况会导致Session的状态的丢失:


    • 配置文件中processModel标签的memoryLimit属性;
    • Global.asax或者Web.config文件被更改;
    • Bin文件夹中的Web程序(DLL)被修改;
    • 杀毒软件扫描了一些.config文件;
    • 系统资源紧张进行资源回收导致IIS进程崩溃或重启等。
    • 更多信息请参阅http://support.microsoft.com/kb/316148

第二种配置模式是StateServer,使用服务器ASP.NET State Service服务进行状态管理,使用时必须确保State Service已经开启,Windows默认是没有开启的,如果长期使用,最好设置成自动启动。此种方式是将Session信息存储在ASP.NET State Service进程中,而不是IIS进程中,这样就可以避免因IIS进程崩溃或重启而导致的Session信息丢失。但是此种方式要求保存在Session的信息必须序列化,然后从Session中获取的时候也要反序列化,这就导致性能有略微的损失。
<sessionState mode="StateServer" cookieless="false" timeout="20"/>这种情况下Session一般不会出现丢失的情况,如果丢失,重启http://ASP.NET State Service服务即可。
第三种配置模式是SQLServer,即使用SQLServer作为Session存储的地方。此种方式是把Session信息保存在SQL Server的数据库中,也需要序列化,性能有较大损失,但是Session一般不会发生丢失的情况,除非SQL Server宕机。而且此种方式也可以实现在Web Form中的Session信息共享(上面两种方式都不可以)。实现方法可以参考Asp.net Session SqlServer的配置。
当然Session还有一些更为高级的使用方法,例如将Sesssion存储到redis中,实现高性能,这里就不在多做介绍。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表