会话管理——Cookie和 Session


【前言】默认HTTP的请求是无状态的(无状态就是默认情况下 HTTP 协议的客户端和服务器之间的这次通信, 和下次通信之间没有直接的联系. 就是我可以会话,但不知道在和谁会话)

谁在跟http会话,该跟谁会话了——Cookie + Session机制

  • Cookie是请求会话的身份凭证,是标识对象的凭证
  • Session是纯后台的数据,记录Cookie(身份凭证信息)及其对应着的用户信息

基本原理

(1)Cookie角度

Cookie是浏览器-服务器之间的:

​ 浏览器需要保存Cookie,在合适的请求中携带Cookie,表现为HTTP请求头中的Cookie Header

​ 服务器生成Cookie并传递给浏览器,表现为响应头中的set Cookie

用户第一次登录——>服务端为该用户生成一个Cookie,并把Cookie返回给用户——>之后,在Cookie有效期内,该用户都携带Cookie

Cookie实则是key-value对,其中有个key是session-id,服务端根据Cookie中的session-id来唯一标识用户的专属数据

(2)Session角度——通过Session-id找到唯一对应的一组客户数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YW4jI4CR-1657073870551)(C:\Users\星\AppData\Roaming\Typora\typora-user-images\1655772468649.png)]

服务端这边使用Session来记录Cookie及其对应着的用户信息,每一个用户对应的session-id都是唯一的,服务端将session-id发给用户后,用户每一个连接都需要携带session-id,比如携带在Cookie中

(3)二者相互配合

所以,Cookie是身份凭证,是客户端的机制,而Session则是服务端的机制,一般,将Session-id发给客户端后,客户端将其携带在Cookie中,二者相互配合,以达到会话管理的目的

Servlet 的 Session 默认是保存在内存中的. 如果重启服务器则 Session 数据就会丢失.

Cookie

第一次访问,需要办理Cookie,然后准备专属的数据柜(Session)

req.getSession(true);

//        true的含义:如果是会员,则返回之前的柜子,如果不是会员,则新建一个新柜子
//		fals的含义:不创建会员
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.Date;

/**Cookie-Session机制
 * @author sunny
 * @date 2022/06/16 19:52
 **/
@WebServlet("/firstVisited")
public class 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笨笨在努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值