登錄成功后如何利用cookie保持登錄狀態


Cookie是一種服務器發送給瀏覽器的一組數據,用於瀏覽器跟蹤用戶,並訪問服務器時保持登錄狀態等功能。

通常用戶登錄的時候,服務器根據用戶名和密碼在服務器數據庫中校驗該用戶是否正確,校驗正確后則可以根據用戶ID和時間戳等屬性加密生成一個Token,並返回給瀏覽器。
生成一個ticket的例子:

WebUtils.saveCookie(response, “ticket”, webTicket, -1, "/", null);

這樣瀏覽器就會得到一個cookie

只要這個訪問回話沒有關閉,所有訪問服務器的請求都會帶上這個cookie。

服務器通過攔截器來校驗用戶的登錄狀態

//偽代碼

public class PassPortIntercepter  extends HandlerInterceptorAdapter {
    public boolean preHandler(HttpServletRequest request, HttpServletResponse response) {
        //攔截請求
        String ticket = request.getParameter("ticket");
        //根據ticke解密用戶的id
        long id = SessionUtil.build(ticket).getUserId();
        //再從數據庫中訪問是否存在這個用戶
        UserInfo user = userInfoService.getUserBy(id);
        //如果不存在user,講該請求攔截,並跳回登錄頁
        if(user == null) {
            return false;
        }
        return super.preHandle(request, response, handler);
    }
}

這種情況下,cookie如果被人竊取,則會有泄露信息的危險。

  1. 通過設置httpOnly屬性,這樣cookie只在http中傳輸,而不會被腳本竊取,但是網絡攔截http請求還是會得到cookie。
  2. 在cookie中加入校驗信息,這個校驗信息與用戶的使用環境相關,比如ip地址,計算機的物理地址等,在服務器端對校驗的時候,如果校驗值發生了變化,則要求重新登錄。


免責聲明!

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



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