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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM