一、前言
HTTP协议是一种无状态协议,一次请求-响应完成,客户端与服务器端的连接就会断开,再次请求需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。
二、cookie和session
1、什么是cookie?
cookie实际上是一小段的文本信息。cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。
1 HttpCookie cookie = new HttpCookie("MyCook");//初使化并设置Cookie的名称
2 DateTime dt = DateTime.Now;
3 TimeSpan ts = new TimeSpan(0, 0, 1, 0, 0);//过期时间为1分钟
4 cookie.Expires = dt.Add(ts);//设置过期时间
5 cookie.Values.Add("userid", "value");
6 cookie.Values.Add("userid2", "value2");
7 Response.AppendCookie(cookie);
2、什么是session?
Session是存在服务器的一种键值对结构存储用户数据。一般情况下,服务器会在一定时间内保存这个 Session,过了时间限制,就会销毁这个Session。
三、在会话跟踪中,通常采取两种机制cookie机制和session机制
1、cookie机制:
(1)客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个cookie。客户端会把cookie保存起来。
(2) 当浏览器再请求该网站时,浏览器把请求的网址连同该cookie一同提交给服务器。服务器检查该cookie,以此来辨认用户状态。服务器还可以根据需要修改cookie的内容。
2、session机制:
(1)当浏览器第一次发送请求时,服务器自动生成了一个session和一个session id用来唯一标识这个session,并将其通过响应发送到浏览器。
(2)当浏览器第二次发送请求,会将前一次服务器响应中的session id放在请求中一并发送到服务器上,服务器从请求中提取出session id,并和保存的所有session id进行对比,找到这个用户对应的session。
四、保存session id的3种方式方式
1、cookie:用cookie保存的,用户提交页面时,将session id提交到服务器端,来存取Session数据。但cookie可能会被浏览器禁用。
2、重写URL:但是它的缺点是会动态生成每个 URL 来为页面分配一个 session 会话 ID。
3、隐藏表单字段,但是点击常规的超文本链接(<A HREF...>)不会导致表单提交,因此隐藏的表单字段也不支持常规的 session 会话跟踪。
五、cookie和session的区别
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的cookie,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。