cookie和session

cookie和session

前言

Http是无状态的协议,http的每一次请求都是独立的,当前请求并不会记录它的上一次请求状态。为了获取之前请求的状态,用到了cookies和session。

Cookie

Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。所以,按存在时间,可分为非持久Cookie和持久Cookie。

Session

一次请求就是一次会话,session称为会话信息,位于web服务器上。可以使用session存储用户的登录信息,服务器会为每个用户生成唯一标识ID。服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。Tomcat中Session的默认失效时间为30分钟。调用Session的invalidate方法,可以手动设置session失效。

使用

  • 服务器端生成cookie,客户端浏览器根据接收到的消息头Set-Cookie: cookieName=cookieValue,存储cookie到内存或者磁盘中。下一次请求,请求头会附带消息头Cookie: cookieName=cookieValue,客户端可以通过HttpServletRequest.getCookies()直接获取到cookies值。
  • 将sessionid存储在cookie中,session可以根据下一次请求携带的Cookie值sessionid来获取同一个用户的会话信息。

URL重写

绝大多数的手机浏览器都不支持Cookie。Java Web提供了另一种解决方案:URL地址重写。URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。这样即使客户端不支持Cookie,也可以使用Session来记录用户状态。HttpServletResponse类提供了encodeURL(String url)实现URL地址重写,该方法会自动判断客户端是否支持Cookie。如果客户端支持Cookie,会将URL原封不动地输出来。如果客户端不支持Cookie,则会将用户Session的id重写到URL中。

注意

  1. 浏览器的子窗口共用父窗口的Session。
  2. TOMCAT判断客户端浏览器是否支持Cookie的依据是请求中是否含有Cookie。尽管客户端可能会支持Cookie,但是由于第一次请求时不会携带任何Cookie(因为并无任何Cookie可以携带),URL地址重写后的地址中仍然会带有jsessionid。当第二次访问时服务器已经在浏览器中写入Cookie了,因此URL地址重写后的地址中就不会带有jsessionid了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值