@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