天堂极乐鸟

导航

获取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

posted on 2021-02-18 18:23  天堂极乐鸟  阅读(1340)  评论(0编辑  收藏  举报