@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