欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[ASP.NET]Session

程序员文章站 2022-06-11 11:37:51
...

前言:上一篇博客分享了一些关于cookie的内容,这篇博客是关于Session的。那么什么是Session,它和cookie又有什么关系呢?下面和大家分享一下Session的内容

(一)Session简介

1.是什么

Session提供了一种把信息保存在服务器内存中的一种方式。它能存储任何数据类型包括自定义对象。
每个客户端的Session是独立存储。

Session 对象用于存储有关用户的信息。
在整个用户会话过程中都会保留此信息。(保存SessionId的cookie丢失之前)

当用户在应用程序中从一个网页浏览到另一个网页时,存储在 Session 对象中的变量不会被丢弃。
Session只可由该会话的用户访问(因为SessionId的内容以cookie的方式保存访问者浏览器的缓存里了)
用户不能访问或修改他人的Session。

注意:当会话过期或终止时,服务器就会清除 Session 对象

2.开发场景

常用于保存登录用户ID

(二)操作和常用属性

Session[“uName”]=“CNYaoMing”;//开始并为Session赋值
string strName = Session[“uName”].ToString();//取值
Session.Abandon();//销毁服务器端的Session对象
Session.Clear();//清空服务端的Session对象里的键值对,Session对象并没有从Session池里销毁
属性 描述
SessionID 唯一用户会话标识符
TimeOut 用户超时(单位:分钟),默认20分钟
Count 会话状态集合中的项目数

(三)Cookie和Session对比

1.安全性

ASP.Net已经内置了Session机制。不要放太多的对象到Session(因为存储在服务器端fw的一个辅助进程里,不稳定,数据多了容易丢失。)。

Session会有【超时销毁的机制】(设置失效时间,默认就是滑动过期机制),发帖(服务器不可能知道浏览器是否在开着,什么时候关闭),发帖计时,在线时间统计,靠请求来判断是否开着。

2.Cookie和Session对比

Cookie是存在【客户端】,Session是存在【服务器端】。

目的是一样的:保存和当前客户端相关的数据(当前网站的任何一个页面都能取到Session、Cookie)。不能放太大的数据,放的数据是object。如果浏览器禁用了Cookie可以启用Url来传递SessionID。

可以看到Session机制并不是Http协议规定的,是ASP.net实现的,现在PHP、JSP等大部分服务端技术都实现了Session,原理都差不多。

3.案例

案例一:Session实现登录,登录以后才能看一些内容。

案例二:用Session实现验证码

HttpHandler要能够操作Session,要实现IRequiresSessionState接口。为什么每次点击值都变化?很正常,因为每次页面点击页面都会刷新,就向ashx重新请求图片,ashx的ProcessRequest都会执行。正常网站登录成功就进入主页面,没机会让你看到变化,但是一旦输入错误也是变化。
每次点击都生成一个新的地址,让浏览器去请求。在AJAX中还会用。

 <img src=“YZM.ashx” onclick=“this.src=‘YZM.ashx?aaa=’+new Date()” />//点击图片产生新的验证码

总结:session在开发中的应用也非常广泛,了解session的应用场景,将session更好的应用到实践中。