别入坑!Session和Cookie的区别

1.Cookie

什么是Cookie呢?因为Http是一种无状态协议,所以假设用户往自己的购物车里放了一件商品,当在在准备放一件时,这时服务器已经无法判断这个行为是属于哪个用户。为了解决这个问题,给每个访问服务器的用户颁发一个通行证,每个通行证都不一样,这样服务器就可以辨别了。这个通行证就是Cookie。Cookie实际上一小段文本信息。

Cookie的主要内容包括名字、值、过期时间、路径、域,路径和域一起划分了cookie的作用范围。

1)Name 和 Value 属性由程序设定,默认值都是空引用。

2)Domain属性的默认值为当前URL的域名部分,不管发出这个cookie的页面在哪个目录下的。

3)Path属性的默认值是根目录,即 ”/” ,不管发出这个cookie的页面在哪个目录下的。可以由程序设置为一定的路径来进一步限制此cookie的作用范围。

4)Expires 属性,这个属性设置此Cookie 的过期日期和时间。

HttpCookie cookie = new HttpCookie("CookName");//初使化并设置Cookie的名称
DateTime dt = DateTime.Now;
TimeSpan ts = new TimeSpan(0, 0, 1, 0, 0);//过期时间为1分钟
cookie.Expires = dt.Add(ts);//设置过期时间
cookie.Values.Add("userid", "value");
cookie.Values.Add("userid2", "value2");
Response.AppendCookie(cookie);

#Cookie可以分为会话cookie和持久化cookie,两者的区别就是有没有设置过期时间。

#Cookie具有不可跨域性,For example:你访问新浪体育的网页请求是不会带有访问虎扑体育的Cookie的。

2.Session

Session是和cookie不同的另一种记录用户状态的机制。session是保存在服务器中,当客户端浏览器访问服务器时,服务器会将客户端的信息以某种方式保存在服务器上,这就是session。当客户端再次访问从服务器中的session中拿取该客户的状态就行了。

那么问题是:所有的客户端浏览器访问过来都是从服务器中的session中取相应的客户状态,服务器怎么知道谁是谁?SeesionID,保存在cookie中的该玩意儿,每次客户端访问的时候都会携带,然后在服务器中找寻对应的客户状态,完美解决了以上问题。

#Session共享的问题:对于多网站(一父网站多子网站)的单一服务器,就是出现各个子网站访问的是同一个父网站,也就是会有多个会话,这样sessionID就无法共享了。解决办法就是:设置Cookie的域名为父域名,达到cookie共享,从而实现sessionID共享。弊端就是子网站的cookie信息也共享了。

###last but not least:

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。

参考自:https://www.cnblogs.com/endlessdream/p/4699273.html

猜你喜欢

转载自blog.csdn.net/Hope_lee/article/details/82827866