博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
session
阅读量:4549 次
发布时间:2019-06-08

本文共 3000 字,大约阅读时间需要 10 分钟。

 

Session简介丶特性


1.Session是一种Web会话中的常用状态之一。

2.Session提供了一种把信息保存在服务器内存中的方式。他能储存任何数据类型,包含自定义对象。

3.每个客户端的Seesion是独立存储的。

4.在整个会话过程中,只要SessionID的cookie不丢失,都会保存Session信息的。

5.Session不能跨进程访问,只能由该会话的用户访问。应为提取Session数据的id标识是以Cookie的方式保存到访问者浏览器的缓存里的。

6.当会话终止,或过期时,服务器就清除Session对象。

7.Session常用于保存登录用户的ID.

8.Session保存的数据是跨页面全局型的。


Session的使用


这里我写入一个例子,便于下面阐述。

 

                
`
账号:
密码:

 

protected void Page_Load(object sender, EventArgs e)        {            //把用户id写入session中            if (Request.Form["hidlgclick"] == "lgclick")            {                if(Request.Form["txtUid"].ToString()=="admin"&&Request.Form["txtUid"].ToString()=="admin") //判断用户登录                {                    Session["userName"] = Request.Form["txtUid"].ToString();  //把用户id保存到session中                    Response.Write(Session["userName"].ToString()+"---点击登录"); //获取session,并写入页面                }            }            //获取Session            if (Request.Form["hidlgclick"] == "getSession")            {                if (Session["userName"] != null)                {                    Response.Write(Session["userName"].ToString() + "---点击获取session"); //获取session,并写入页面                }            }            //取消当前会话,相当于注销(退出登录)。            if (Request.Form["hidlgclick"] == "backLg")            {                Session.Abandon();            }        }


Session原理(根据上面例子阐述)


 

一、session是怎么存储,提取的?

1.在服务器端有一个session池,用来存储每个用户提交session中的数据,Session对于每一个客户端(或者说浏览器实例)是“人手一份”,用户首次与Web服务器建立连接的时候,服务器会给用户分发一个SessionID作为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SessionID包含在HTTP头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪一个客户端,而这个SessionID是一cookie的方式保存的在客户端的内存中的,如果想要得到Session池中的数据,服务器就会根据客户端提交的唯一SessionID标识给出相应的数据返回。

2.输入正确的账号密码,点击登录,页面就会输出  “admin --- 点击登录”

二、Session池中每个客户端的数据是怎么存储的?

1.存储在Session池中的数据是全局型的数据,可以跨页面访问,每个SessionID中只存储唯一的数据,如:首先你这样设定:session["userName"]="admin",然后你在会话还没结束的session还没过期的情况下,你又设定:session["userName"]="123";这样这个SessionID没变,然而Session池中的数据则被覆盖。此时session["userName"]的值就是“123”,而不是其它。

2.Session池中的数据不能跨进程访问。如:打开login.aspx页面写入session[“userName”]="admin";然后login页面不关闭,即此会话不结束,在这是你再在另外一个浏览器中打开一个login.aspx页面则session["userName"]=null

3.输入账号密码,点击登录页面输出  “admin --- 点击登录” ,如果紧接着点击获取session按钮,则页面只输出"admin--- 点击获取session",如果页面不关闭,打开另外一个浏览器,点击获取session按钮,则页面没法应。

三丶session的声明周期与销毁

1.session存储数据计时是滚动计时方式。具体是这样的,如果你打开写入session,从写入开始,此页面如果一直没有提交操作,则默认时间是20分钟,20分钟后session被服务器自动销毁,如过有提交操作,服务器会从提交后重新计时以此类推,直至设定时间内销毁。

2.可以设置session的销毁时间。上面代码有提到。

四丶session中保存的数据是在服务端的,而每个用户如进行登录操作,都要进行session数据写入,所以建议慎用session,就是少用。

转载于:https://www.cnblogs.com/lk516924/p/4754636.html

你可能感兴趣的文章
IDEA远程仓库版本回滚
查看>>
C++矩阵库 Eigen 简介(转载)
查看>>
sklearn的train_test_split()各函数参数含义解释(非常全)
查看>>
机器学习算法的整体流程(非常易懂)
查看>>
机器学习梯度下降法的数学原理(非常易懂)
查看>>
数据归一化Scaler-机器学习算法
查看>>
机器学习线性回归算法的评价指标(简单线性回归问题)
查看>>
教你如何剖析源码(转)
查看>>
proxy和proxy-no的策略取值区别
查看>>
Silverlight代码编写对控件的PlaneProjection.RotationY属性控制动画
查看>>
AFNetworking
查看>>
unity3d Start执行不同时问题
查看>>
session
查看>>
JS只能输入数字
查看>>
Laravel 数据库连接, 数据库名,配置文件修改
查看>>
屌丝接盘侠们,孩子可能不是你们亲生的!
查看>>
BZOJ 1854 【SCOI2010】 游戏
查看>>
JavaScript - 匿名函数和闭包
查看>>
负载均衡下的资源文件配置/多站点下的资源文件夹共享(Windows IIS)
查看>>
MySQL firstmatch strategy
查看>>