这是我参与8月更文挑战的第25天,活动详情查看:8月更文挑战
HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录;为了记录如用户的登录状态,出现了Session 和 Cookie,Session 和 Cookie 的主要目的就是为了弥补 HTTP 的无状态特性。
一、理解Cookie
HTTP 协议中的 Cookie 包括 Web Cookie 和浏览器 Cookie,它是服务器发送到 Web 浏览器的一小块数据。服务器发送到浏览器的 Cookie,浏览器会进行存储,并与下一个请求一起发送到服务器。通常,它用于判断两个请求是否来自于同一个浏览器,例如用户保持登录状态。
Cookie保存在浏览器端,是用来跟踪浏览器用户身份的会话方式,单个cookie保存的数据不能超过4kb,并且只能以文本的方式保存字符串类型。
使用Cookie的缺点: (1)大小限制:单个cookie保存的数据不能超过4KB
(3)安全性较低:用户可以操作(禁用)cookie,导致安全性较低
(4)有些状态不可能保存在客户端。
(5)浪费带宽:每次访问都要传送cookie给服务器。
(6)cookie数据有路径(path)的概念,可以限制cookie只属于某个路径下。
Cookie的生命周期:
如果不在浏览器中设置过期时间,cookie是被保存在内存中,它的生命周期随浏览器的关闭而结束,这种称为会话cookie。若我们在浏览器中设置了过期时间,cookie则被保存在硬盘中,关闭浏览器后,cookie数据仍然存在,直到过期时间结束才消失。
Cookie的应用场景: (1)判断是否登陆过网站,以便下次登录时能够实现自动登录(或者记住密码)。
(2)保存上次登录的时间等各种信息。
(3)保存用户上次查看的页面
(4)浏览网页计数
二、理解Session
客户端请求服务端,服务端会为这次请求开辟一块内存空间,这个对象便是 Session 对象,存储结构为 ConcurrentHashMap。Session 弥补了 HTTP 无状态特性,服务器可以利用 Session 存储客户端在同一个会话期间的一些操作记录。
Session保存在服务器端,用来跟踪浏览器用户身份的会话方式,并且大小是没有限制的,当没有被访问时开始计算时间,默认的失效时间为20min。Session存储通过类似与Hashtable的数据结构来保存,能支持任何类型的对象(session中可含有多个对象)
Session的应用场景:保存每个用户的专用信息,变量的值保存在服务器端,通过SessionID来区分不同的客户。
(1)网上商城中的购物车
(2)保存用户登录信息
(3)将某些数据放入session中,供同一用户的不同页面使用
(4)防止用户非法登录
Session的缺点:
(1)Session保存的东西越多,就越占用服务器内存,对于用户在线人数较多的网站,服务器的内存压力会比较大。
(2)依赖于cookie(sessionID保存在cookie),如果禁用cookie,则要使用URL重写,不安全 i9 c vwesx (3)创建Session变量有很大的随意性,可随时调用,不需要开发者做精确地处理,所以,过度使用session变量将会导致代码不可读而且不好维护。