Cookie和Session的原理与区别

Cookie

什么是Cookie?

Cookie,有时也用其复数形式Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。

为什么要用Cookie?

因为http协议是一种无状态的协议也就是我们的客户端和服务端互相不认识,也就是对事务的处理缺少记忆力,当我们后续处理数据的时候想要前面的数据的时候,就需要客户端再次的去传输前面的数据,这样一来我们每次传输的数据量就比较的大了,同时也降低了服务端响应的速度。

Cookie的原理

就是当客户端访问服务器的时候(服务器运用了cookie),服务器会生成一份cookie传输给客户端,客户端会自动把cookie保存起来,以后客户端每次访问服务器,都会自动的携带着这份cookie,这样就避免了不必要的传输。

Session

什么是Session?

Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了session是一种特殊的cookie。cookie是保存在客户端的,而session是保存在服务端。

为什么要用Session?

由于cookie 是存在用户端,而且它本身存储的尺寸大小也有限,最关键是用户可以是可见的,并可以随意的修改,很不安全。那如何又要安全,又可以方便的全局读取信息呢?于是,这个时候,一种新的存储会话机制:session 诞生了。

Session原理

当客户端第一次请求服务器的时候,服务器生成一份session保存在服务端,将该数据(session)的id以cookie的形式传递给客户端;以后的每次请求,浏览器都会自动的携带cookie来访问服务器(session数据id)。

核心方法

HttpServletRequest 类

在调用getSession的时候我们服务器首先会获取请求中的Cookie里面的SessionId字段通过这个字段来查找服务器中是否存在相应的HttpSession,如果不存在就创建会话。

创建会话

的时候会创建一个 HttpSession 对象,并且生成一个 sessionld (是一个很长的数字,通常是用十六进制来表示,能够保证唯一性~)接下来就会把 这个 sesionld 作为 key,把这个 HttpSession 对象,作为 value,把这个键值对,给保存到 服务器内存 的一个"哈希表“这样的结构中~~
再然后, 服务器就会返回一个 HTTP 响应,把 sessionld 通过 Set-Cookie 字段返回给浏览器浏览器就可以保存这个 sessionld 到 Cookie 中了。

获取会话
先获取到请求中的 cookie 里面的 sessionld 字段~(也就是会话的身份标识)判定这个 sessionld 是否在当前服务器上存在~~(也就是在这个 哈表 中是否有)如果有,就直接查询出这个 HttpSession 对象 并且通过返回值返回回去。

HttpServletResponse

HttpSession

一个 HttpSession 对象里面包含多个键值对. 我们可以往 HttpSession 中存任何我们需要的信息。

Cookie 类

实现用户登录

LoginServlet 类

此处的 getSession 参数为 true, 表示查找不到 HttpSession 时会创建新的 HttpSession 对象, 并
生成一个 sessionId, 插入到 哈希表 中, 并且把 sessionId 通过 Set-Cookie 返回给浏览器。

IndexServlet 类

在这个代码中是看不到 "哈希表", 也看不到 sessionId 这样的概念的. getSession 操作内部提取到
请求中的 Cookie 里的 sessionId, 然后查找哈希表, 获取到对应的 HttpSession 对象。

前端代码

上传文件

核心方法

HttpServletRequest 类方法

Part 类方法

实战演示

提交一张图片到服务器中。

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值