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

  • 相关阅读:
    MySQL对于数据库应该如何如何配置安全问题了
    对于改善 MySQL 数据装载操作有效率的方法是怎样
    MySQL与SQL比较有那些区别呢
    Centos6.5和Centos7 php环境搭建如何实现呢
    php单例模式是怎么实现的呢
    PHP编写的图片验证码类文件分享方法
    PHP中header函数的用法及其注意重点是什么呢
    java正则表达式四种常用的处理方式是怎么样呢《匹配、分割、代替、获取》
    PHP弱类型安全问题的写法和步骤
    vs2010 使用IIS EXPRESS出错.
  • 原文地址:https://www.cnblogs.com/aojun/p/14413042.html
Copyright © 2011-2022 走看看