Session和Cookie介绍与对比

Session和Cookie

1.Cookie

客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie(http的Set-Cookie头部)。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

有两个http头部是专门负责设置以及发送cookie的,它们分别是Set-Cookie(指示客户端建立一个cookie,并且在后续的http请求中自动发送这个cookie到服务器端,直到这个cookie过期)以及Cookie(客户端发送时将信息加在http的Cookie头部中)。
  1. 过期:如果cookie的生存时间是整个会话期间的话,那么浏览器会将cookie保存在内存中,浏览器关闭时就会自动清除这个cookie。另外一种情况就是保存在客户端的硬盘中,浏览器关闭的话,该cookie也不会被清除,直到设置的过期时间结束。
  • maxAge为负数,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效,不会被持久化到本地。
  • maxAge为0,则表示删除该Cookie。
  • maxAge为正数(秒),则表示在该时间内Cookie有效。
  1. 修改删除:修改、删除Cookie时,是通过新建Cookie来覆盖原Cookie(删除时新建Cookie的maxAge要设为0)。新建的Cookie除value、maxAge之外的所有属性,例如name、path、domain等,都要与原Cookie完全一样,否则无法覆盖。
浏览器会将domain和path都相同的cookie保存在一个文件里,cookie间用*隔开。	domain表示的是cookie所在的域,cookie不可跨域名(即百度的cookie不会提交到谷歌的域名去)
  1. 安全:设置Cookie的secure属性为true。浏览器只会在HTTPS和SSL等安全协议中传输此类Cookie。

2.Session

Session是服务器端使用的一种记录客户端状态的机制,保存在服务器中。在服务器端运行时,在Java中是通过调用HttpServletRequest的getSession方法(使用true作为参数)创建的。

  1. 创建时间:每个来访者对应一个Session对象,所有该客户的状态信息都保存在这个Session对象里。Session在用户(客户端)第一次访问服务器的时候自动创建。需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session。如果尚未生成Session,也可以使用request.getSession(true)强制生成Session。
  2. 有效期:为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。
  3. Session的识别:HTTP协议是无状态的,Session需要使用Cookie作为识别标志。服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。该Cookie为服务器自动生成的,它的maxAge属性一般为–1,表示仅当前浏览器内有效,并且各浏览器窗口间(除了子窗口)不共享,关闭浏览器就会失效。因此同一机器的两个浏览器窗口(除了子窗口)访问服务器时,会生成两个不同的Session。
客户端不支持Cookie时:URL地址重写,将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。

3.Cookie与Session的区别

  1. cookie数据存放在客户的浏览器上,session数据放在服务器上。
  2. cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。
  3. session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。
  4. 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
所以登陆信息等重要信息存放为SESSION,其他信息如果需要保留,可以放在COOKIE中。

猜你喜欢

转载自blog.csdn.net/m0_37536626/article/details/80649731