場景
一個系統中需要用戶登錄,當用戶登錄之后,用一個全局變量存放用戶信息,當用戶執行一些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
