Cookie和Session学习总结

目录

Session

使用session保存登录状态的原理

cookie经典案例实现十天免登录功能

cookie和url对应


Session

session对象最主要的作用是:保存会话状态。(用户登录成功了,这是一种登录成功的状态,你怎么把登录成功的状态一直保存下来呢?使用session对象可以保留会话状态。)

为什么需要session对象来保存会话状态呢?

  • 因为HTTP协议是一种无状态协议。所以提出了session机制来保存状态

  • 什么是无状态:请求的时候,B和S是连接的,但是请求结束之后,连接就断了。为什么要这么做?HTTP协议为什么要设计成这样?因为这样的无状态协议,可以降低服务器的压力,不然很多人发送请求,一直和服务器保存连接,服务的压力是很大的。请求的瞬间是连接的,请求结束之后,连接断开,这样服务器压力小。

  • 只要B和S断开了,那么关闭浏览器这个动作,服务器知道吗?

    • 不知道。服务器是不知道浏览器关闭的,服务器不知道你还有没有登录。

  • 所以需要用session来保存登录状态

使用session保存登录状态的原理

    @RequestMapping(value = "/userLogin")
    public String userLogin(String userName, String password,HttpServletRequest request){
        // 获取对应的session,没有则创建新的。
        HttpSession session = request.getSession();

        User user = new User(userName, password);
        // 将登录成功的user对象存到session对象中
        session.setAttribute("loginUser",user);

        // 登录成功跳到主页面
        return "main";
    }

1、张三打开一个浏览器A,李四打开一个浏览器B,第一次登录访问服务器之后,在服务器端会生成:

  • 张三专属的session对象

  • 李四专属的session对象  

同时会生成各自对应的sessionID,然后将各自的sessionID发给浏览器。

服务器端是以一个Map来保存session的,key是sessionID,value是对应的session对象;

浏览器是以cookie的形式保存sessionID,JSESSIONID=xxxxxx。

2、后面浏览器再发送请求,就会将这个各自的sessionID发给服务器,服务器拿到后,根据这个sessionID获取对应的session对象,取出里面的登录对象user。如果没登陆过就没有这个user对象,如果没有sessionID也说明没登陆过。

    // 在目标方法执行前执行,请求执行前,所有请求前处理
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle");

        // 根据浏览器发过来的sessionID,获取对应的sessionID,没有则创建新的
        HttpSession session = request.getSession();
        
        // 取出session中的 loginUser 对象,登录过会存
        Object loginUser = session.getAttribute("loginUser");
        if (loginUser != null) {
            return true;// 放行
        }

        return false;// 拦截
    }

3、然后如果浏览器关闭,保存在内存的cookie就没了,也就是sessionID没了,这样后面再打开浏览器就需要重新登录。或者安全退出后端销毁session对象。

cookie其实就是保存在浏览器上面的一个key-value键值对,比如sessionID=xxx就是一个cookie。

cookie是保存在浏览器客户端上的。

  • 可以保存在运行内存中。(浏览器只要关闭cookie就消失了。)

  • 也可以保存在硬盘文件中。(永久保存,只有清除cookie才会消失。)

cookie经典案例实现十天免登录功能

用户输入正确的用户名和密码,并且同时选择十天内免登录。

后端创建cookie保存这个正确的用户名和密码,并设置cookie的存活时间为十天

设置这个cookie对应的路径为126.com

然后将这个cookie发送给浏览器

登录成功后。浏览器客户端会保存一个cookie,这个cookie中保存了用户名和密码等信息,这个cookie是保存在硬盘文件当中的,十天有效。在十天内用户再次访问126.com的时候,浏览器自动提交126.com的关联的cookie给服务器,服务器接收到cookie之后,获取cookie中的用户名和密码,验证,通过验证之后,自动登录成功。

cookie和url对应

在HTTP协议中是这样规定的:每一个cookie都对应一个路径url,当浏览器发送请求的时候,只要这个url和cookie匹配上了,就会自动发送(request)该路径url对应下的cookie给服务器。(URL。)

只会发送URL下对应的cookie给服务器。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

躺着听Jay

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

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

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

打赏作者

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

抵扣说明:

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

余额充值