asp.net javascrip获取session的值_第四节:框架前期准备篇之进程外Session的两种配置方式...

一. 基本介绍

1. 背景:Asp.Net默认的Session机制是进程内,存储在服务器端内存中,有这么几个缺点:

①:既然存在内存中,空间有限,不能存储大数据量信息,数据量多的话Session会被挤爆。

②:IIS只要一重启,Session就会丢失,哪怕就是改一下配置文件,IIS也会重启,此时如果客户端有用户通过浏览器正在访问该网站,如果用到Session,原Session是丢失的了,就会报“未将对象引用设置到对象的实例”类似的错误。

③:Session是依赖Cookie来保存SessionID的,所以如果浏览器禁用Cookie,那么Session也是不能用的。【PS:即使使用进程外Session解决不了这个问题】

默认进程内的Session的优点:读写速度快。

进程内Session的配置代码:

在System.Web 节点下加: ,30代表30分过期,默认为20分钟过期。

2. Session和Cookie的关系

这里简单说一下:Session是一个Key-Value集合,而这个Key即SessionID是存储在浏览器的Cookie中的,Cookie默认的生命周期是浏览器的生明周期,浏览器关闭,cookie消失,所以当浏览器关闭后再重新打开,Cookie消失,原SessionID消失,即使服务器端Session还存在,客户端也无从获取了。

详细的Session介绍详见:http://www.cnblogs.com/yaopengfei/p/8057176.html 中的第 5 点

3. 进程外Session的种类

① 状态服务器Session:比默认的进程内Session稍慢一点,比数据库Session慢很多,存储空间比进程内的稍大一些, 但毕竟还是存储在内存中的,空间是有限,也会容易被挤爆。

② 数据库Session:这里以SQLServer为例,因为微软有些工作已经给做好了,简单配置一下就行了. 数据库Session的读写速度 要慢,但好处是可以认为空间“无限大”,并且相对稳定。

PS:上述仅是为了介绍两种通用的方式,很多情况下,可以使用NoSQL来存储信息,要比关系型数据库读写快的多。

4. 进程外Session解决的问题

解决了IIS重启Session丢失的问题,解决了Session空间有限容易被挤爆的问题,但不能解决浏览器重启找不到Session的问题!

二. 状态服务器Session

步骤一:

以win10为例,运行services.msc,打开服务列表,找到【ASP.NET State Service】,右键启动即可。

077ec3518f128940df20d0ab19738e01.png

步骤二:

在节点下加上下面一句话

PS:状态服务器端口默认为:42424,该模式无法支持负载均衡,如有需要,采用数据库Session的形式。

如何修改默认端口?

打开注册表 [HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/aspnet_state/Parameters],其中:Port为端口号,十进制,默认即为42424; AllowRemoteConnection的值 0代表仅能本机使用,1代表供其他机器使用.

392fd42b0c19b9b2964502a9b4a4719f.png

三. 数据库Session

步骤一:

cmd 进入这个路径 C:WindowsMicrosoft.NETFrameworkv4.0.30319

步骤二:

运行指令 aspnet_regsql.exe -U sa -P 123456 -ssadd -sstype c -d MagicDB

ps:sa为数据库登录名 123456为数据库密码 MagicDB为存储Session的数据库

运行完毕后,会发现该数据库下多了两张表,分别是:ASPStateTempApplications 和 ASPStateTempSessions,如下图:

08d5082062b753609317b51170356f98.png

步骤三:

在节点下加上下面一句话:

PS:默认过期时间为20分钟,上述代码将过期时间设置为1000分钟。

补充:写入数据库Session中的信息如果是实体的话,需要可序列化,否则不能写入。

bf6f50a900874ff4d8a750de9e731f01.png

四. 测试

分享测试代码:

 1 ///  2 /// 测试页面 3 ///  4 ///  5 public ActionResult Index() 6 { 7 if (Session["test"]==null) 8 { 9 ViewBag.msg = "没有数据了";10 Session["test"] = "ypf";11 }12 else13 {14 ViewBag.msg = Session["test"];15 }16 return View();17 }

将该项目项目发布到IIS,默认第一次进入显示“没有数据了”,刷新一下,显示“ypf”,此时重启IIS,再次刷新页面,仍然显示“ypf”,证明进程外Session有效。

第一次访问:

cc81d01c80437464285eaff0aa7702e7.png

刷新浏览器:

a495dc968335957f4e42fdd6eb8d2391.png

重启IIS,刷新浏览器:

0ccaa1fe35e91fcf1b3c6296818b6dec.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值