通過Cookie存放用戶登錄信息以及安全性問題


場景

一個系統中需要用戶登錄,當用戶登錄之后,用一個全局變量存放用戶信息,當用戶執行一些Action的時候,需要先驗證用戶信息是否存在,如果存在則往下執行方法,如果不存在則跳轉到登錄界面。當用戶點擊退出系統或者關閉瀏覽器的時候,用戶信息將被清除。

采用Cookies存放用戶信息

當用戶進入登錄界面,首先檢測用戶名密碼是否正確,然后將信息存放到Cookies中

Response.Cookies["username"].Value = username;

退出系統時,則將Cookies的時間設置為負數,則Cookies則會被清除

Response.Cookies["username"].Expires = DateTime.Now.AddDays(-1);

這里要注意一下,我之前對Cookies設置了存活時間(這也是接觸Cookies時候給自己留下的一個固話概念,Cookies就需要設置時長),我關閉了瀏覽器之后,我仍可以直接輸入相關的Action的url,跳過登錄步驟,也就是說Cookies還未清除。
原因是如果一個Cookies沒有設置時間,則該Cookies是加載到內存中,當關閉瀏覽器時,Cookies也將清除;如果設置了時間,則會將Cookies存儲到一個文件中,只要時間沒到,即使關閉了瀏覽器,Cookies信息仍然存在。
這樣做了之后,點擊退出系統,以及點擊關閉瀏覽器都能成功將Coolies信息清除,如果直接輸入系統內部的url是無法進入,並跳轉到登錄界面。
但是存在一個問題,如果用戶關閉頁面,瀏覽器仍然未關閉,Cookies信息還是沒有清除,這時候還是可以直接輸入url並成功進入。
因此,我想到用javascript來監聽關閉頁面,在javascript中清除Cookies信息的方法。

第一步:綁定窗口關閉方法:

$(window).bind('beforeunload', function () {
    DelCookie("username");
});

第二步:
通過document.cookie方法獲取所有cookies,根據key來得到需要刪除的cookie,將該cookie設置截止時間為負數即可

function GetCookieValue(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie != '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var cookie = jQuery.trim(cookies[i]);
            if (cookie.substring(0, name.length + 1) == (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}
function DelCookie(name) {
    var exp = new Date();
    exp.setTime(exp.getTime() + (-1 * 24 * 60 * 60 * 1000));
    var cval = GetCookieValue(name);
    document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
}

這樣就能夠成功滿足:
1 點擊退出系統
2 關閉瀏覽器
3 關閉頁面
就能夠清除用戶登錄信息,直接輸入系統內部url無法進入系統的需求。

 

轉自:https://blog.csdn.net/u014229215/article/details/78069472


免責聲明!

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



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