cookie和session

分析案例

如下图,思考问题:为什么要有银行卡

答案:因为银行不会记住客户,只认银行卡

银行业务的特点

  1. 第一次办理存钱业务,银行就给客户发银行卡
  2. 之后每次到银行办理存钱、取钱业务,都需要带着银行卡

为什么需要cookie和session

HTTP协议是 无状态协议,一句话解释:
浏览器 不会保存 web服务器的信息,web服务器也 不会保存 浏览器的信息

也就是说:当浏览器输入用户名、密码登录成功后,再次访问服务器时,服务器还是不知道你是谁

为了解决 HTTP无状态 的问题,提出 cookie 和 session

也就是说:

  1. 浏览器的cookie中,JSESSIONID=随机字符串的随机字符串,相当于 银行卡
  2. 服务器端的session中,也有该随机字符串,相当于银行系统中,有该银行卡的记录
  3. 浏览器每次向服务器发请求时,会将cookie中的所有数据,也一并发送给服务器

cookie

Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie

位置

存储在浏览器

谷歌浏览器 的cookie位置如下:

C:\Users\系统登录名\AppData\Local\Google\Chrome\User Data\Default\Cookies

Edge 的cookie位置如下:

C:\Users\系统登录名\AppData\Local\Microsoft\Edge\User Data\Default\Network

存储方式

一般以 文本方式、SQLite数据库 存储

作用

记录用户的信息

  1. 记住用户名、密码
  2. 跟踪用户访问记录
  1. 浏览器端,使用javascript可以修改
  2. web服务器端可以修改。通过发送Set-Cookie响应头,如下:
    Set-Cookie: sessionid=123456
    

缺点

  1. 安全性较低,容易被窃取
  2. 每个域名的cookie个数有限制,一般一个域名下可以有20-50个cookie,具体跟浏览器有关
  3. 有大小限制,一般4k左右,具体跟浏览器有关
  4. 由于cookie的一些缺点,有些浏览器会禁用cookie
  5. 每次访问服务器,都会传送cookie给服务器,浪费带宽

session

会话

位置

存储在web服务器

存储方式

一般以对象方式存储,如:jsp、python

创建

浏览器 第一次 访问web服务器时,web服务器端就创建了session对象,并生成 唯一字符串,并将该字符串作为cookie,发送给浏览器

jsp:生成 唯一字符串,可通过 session.getId() 获取

cookie:该 唯一字符串 作为 JSESSIONID 的值,作为cookie,发送给浏览器,格式:JSESSIONID=随机字符串

销毁

  1. 关闭浏览器。
    其实关闭浏览器后,session不会立即销毁。当打开浏览器再次访问该web服务器时,如果cookie中没有 凭证,该服务器会再次 重复 创建 的过程

  2. session超时。
    一般默认30分钟内,没有访问网站,就会认为session超时,即 web服务器端销毁该session

  3. 通过代码销毁

jsp获取cookie

Cookie[] cookieArr = request.getCookies();
if(cookieArr != null && cookieArr.length>0 ) {
    for(Cookie cookie : cookieArr) {
        out.println(cookie.getName()+":"+cookie.getValue()+"<br/>");
    }
}

out.println("session id:"+session.getId());

感谢:
https://blog.csdn.net/proglovercn/article/details/45514705


原文出处:/show_1EF3sMbk2GQ1.html