登陸成功後如何利用cookie保持登陸狀態

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

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

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地址,計算機的物理地址等,在服務器端對校驗的時候,若是校驗值發生了變化,則要求從新登陸。
相關文章
相關標籤/搜索