zoukankan      html  css  js  c++  java
  • 获取cookie的两种方式和session共享解决方案

    @RequestMapping("/getCookie")
    public String getCookie(@CookieValue("name")String name, HttpServletRequest request) {
        // 方式一: 通过request获取Cookie数组,然后循环
        Cookie[] cookies = request.getCookies();
        for (Cookie item : cookies) {
            System.out.println(item.getName()+":"+item.getValue());
        }
        // 方式二: 直接使用@CookieValue获取
        System.out.println(name);
        return null;
    }

    使用@CookieValue方式获取cookie时,如果没有获取到相应名字的cookie,会立刻报错,而使用request.getCookie()方式则不会。

    session共享的几种方案

    使用session保存数据时,如果服务器集群数量过多,则在服务期间实现session共享会变的困难,使用redis可解决该问题,因此通常登陆时临时验证码使用redis保存。

    1)cookie加密的方式保存在客户端
    
    优点:减轻服务器端压力
    
    缺点:受到cookie大小限制,因为每次请求会在头部附带cookie信息,占用一定的带宽。另外,这种方式在用户禁用cookie的情况下无效。这种方式不常用。
    
    2)服务器间同步比如tomcat集群:通过配置tomcat,实现session共享。每个tomcat都会在局域网中广播自己的session信息,同时监听其他tomcat广播的session,
    一旦自己的session发生变化,其他的tomcat能够感知到的,同时就可以同步自己的session和它一样。缺点:当集群服务器数量比较大如200台,每一台服务器的tomcat
    都需要广播自己的session,同时监听另外199台,此时,服务器的大量资源都用来处理session同步的事情,用户正常的访问就会受到影响。要视部署的tomcat集群数量
    等来定是否使用这种方式。
    3)基于分布式缓存的session共享机制 如使用redis取代session保存用户信息,这种方式比较常用

    资料来源

    可以获取Cookie值的两种方式(@CookieValue)

    https://zhuanlan.zhihu.com/p/138326324

    session共享的几种方案

    https://blog.csdn.net/m0_52613676/article/details/113194106?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-2&spm=1001.2101.3001.4242

  • 相关阅读:
    【转】测试驱动开发
    【转】什么是“脚本语言”
    【转】“解决问题”与“消灭问题”
    【转】程序语言的常见设计错误(1)
    【转】解密“设计模式”
    【转】所谓软件工程
    【转】清华梦的粉碎
    算法知识目录整理
    买书不读是一种什么病?
    Linux 下socket通信终极指南(附TCP、UDP完整代码)
  • 原文地址:https://www.cnblogs.com/aojun/p/14413042.html
Copyright © 2011-2022 走看看