c#--session--用戶關掉頁面清空session

asp.net用戶註銷或者關閉網頁時清除用戶Cookie

一般在系統中都會用到cookie,但是有時候需要在用戶註銷或者關閉網頁時將所有cookie給清除,所謂清除cookie不是說從硬盤上將cookie從硬盤上面刪除,而是讓需要刪除的cookie過期,
1.用戶註銷時刪除cookie的方法很簡單:

for (int i = 0; i <Response.Cookies.Count; i++)
{
Response.Cookies[i].Expires = DateTime.Now;//cookie將馬上過期
}

2.有時候用戶退出系統不一定會點擊註銷按鈕,而是選擇直接關閉瀏覽器,這時應該怎麼刪除cookie呢,查了一下,如果給cookie不設置過期時間,那麼cookies的有效期即爲瀏覽器的生命週期,當瀏覽器關閉時cookies(未設置過期時間)自動過期;
————————————————
版權聲明:本文爲CSDN博主「Baple」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/Baple/article/details/6855715

.
.
.
.

退出登錄清空session如何從前臺到後臺 (部分已試驗)

前臺頁面
獲取項目路徑

<% String path = request.getContextPath(); %>

頁面退出按鈕

<a  href="javascript:;" onclick="logout()">安全退出</a>
<script>
  	//退出系統的方法
  	function logout(){
  		location.href="<%=path%>/logout.do";
  	}
</script>

後臺代碼

@RequestMapping("/logout")
public void logout(HttpServletRequest request,HttpServletResponse response){
	request.getSession().invalidate();
	try {
		request.getRequestDispatcher("/login.jsp").forward(request, response);
	} catch (Exception e) {
		e.printStackTrace();
	}
}

退出登錄後讓瀏覽器後退按鈕失效

下面代碼寫在登錄頁面

下面這塊代碼已試驗。好用

<script type="text/javascript">
$(function(){
		  if(window.history && window.history.pushState){
		  		$(window).on("popstate", function(){
			  		window.history.pushState("forward", null, "#");
			  		window.history.forward(1);
		  		});
		  }
		  window.history.pushState("forward", null, "#"); //在IE中必須得有這兩行
		  window.history.forward(1);
		});
</script>

————————————————
版權聲明:本文爲CSDN博主「閣下大名」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/z19799100/article/details/87889852
.
.
.
.
.

asp.net中的窗體身份驗證(完整篇之六:登出後不能通過後退回來面來的頁面)

https://blog.csdn.net/smallfools/article/details/5630404

這個標題好長啊。

原本是沒打算寫下這一篇的,因爲覺得身份驗證到了登出之後,就算完成了。可是後來有博友提出疑問,登出之後,點擊瀏覽器上的後退按鈕,還是可以退回到登出前頁面,起不到身份驗證的作用。

事實上,就算使用後退按鈕回到原來的頁面,也只能看看頁面內容,而不能對網頁進行操作。一但進行操作的話,還是會需要重新登錄的。

也許,有些朋友對頁面的安全性要求比較高,連看都不想讓人家看到。那這要怎麼辦?

這要從瀏覽器的緩存說起了。在N久以前,網絡的寬帶慢的是很慢很慢,所以,瀏覽器都有一個叫做“緩存”的功能。當你瀏覽了網頁之後,就會把這個網頁先緩存到本地計算機中,等你下一次再訪問該網頁時,瀏覽器會將緩存到本機計算機中的內容與服務器上的內容進行比較,如果沒有更新,就不從服務器上讀取網頁,而是直接顯示本地計算機中緩存的內容。這樣做有兩個好處,第一、客戶端可以快速打開網頁,節省等待的時間;第二、減少服務器壓力。

所以,這個功能就一直保留了下來,直到今天、明天或者後天。

如果想不讓瀏覽器緩存網頁,最簡單的方法就是使用HTML代碼來實現,如以下代碼所示。

<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />

以上代碼應該放在和之間,第一句是HTTP 1.1標準中支持的,讓瀏覽器不緩存網頁內容;第二句是HTTP 1.0標準中支持的,讓瀏覽器不緩存網頁內容。因爲不知道用戶瀏覽器支持什麼標準,所以可以把兩句都加上。第三句,指定是網頁過期時間,一般來說content值都是指定的一個時間,在這個時間之前,瀏覽器會顯示緩存中的內容,這個時間之後,纔會從服務器中讀取新內容。如果爲0或負數,那麼就說明瀏覽器永遠都從服務器中讀取網頁內容。

根據我十年前寫HTML的經驗,這樣寫就完全沒有問題了。可是沒想到的是……測試結果讓我大跌眼鏡、IE8、chrome6、Opera10和FireFox3.5下的測試全部沒通過,點擊瀏覽器的後退,還是可以看到登出後的網頁。

還好,我還有九年前編寫ASP的經驗,於是,在.CS文件中加入了以下代碼:

 //禁止客戶端緩存服務器上的網頁
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
//添加HTTP頭
//HTTP 1.0標準,作用相當於<meta http-equiv="Pragma" content="no-cache" />
Response.AddHeader("pragma", "no-cache");
//HTTP 1.1標準,作用相當於<meta http-equiv="Cache-Control" content="no-cache" />
Response.AddHeader("Cache-Control", "no-cache");
//設置不緩存
Response.CacheControl = "no-cache";
//設置在瀏覽器上緩存的頁面的過期時間
Response.Expires = -1;
//從緩存中移除的日期
Response.ExpiresAbsolute = DateTime.Now.AddSeconds(-1);

曾經,在ASP中使用了類似於以上代碼的代碼,那真是天下無敵,無論是IE瀏覽器還是Netscape瀏覽器(多讓人懷念的瀏覽器啊),都能完美地實現不能後退的功能。

美滋滋地進行了測試,這回,又讓我跌了一次眼鏡居然除了IE8(我沒安裝別的版本的IE)能實現不能後退的功能之外,chrome6、Opera10和FireFox3.5下的測試全部沒通過。

最後,我不得不使用asp.net的絕招了,在CS中加上以下代碼:

 Response.Cache.SetNoStore();

這回的測試結果還算滿意,IE8、chrome6和FireFox3.5都通過測試,只有Opera10還是很頑強地從緩衝中讀取網頁內容。至於怎麼讓Opera瀏覽器也實現網頁過期,目前我還沒有找到方法。如果有哪位朋友知道的話,請告訴我,謝謝。

在做測試時,以上代碼寫在子目錄的測試頁裏,測試方法爲:先進入登錄頁面–>登錄後進入測試頁面–>進入登出頁面–>單擊瀏覽器的後退按鈕回退到測試頁面。

如果想在登出之後,使用後退按鈕不能回退到任何一頁,那麼就可以在任何一個網頁中加入以上代碼。當然,還有一個簡單的方法,在Global.asax文件中加入以下代碼:

protected void Application_BeginRequest(Object sender, EventArgs e)
{
    HttpContext.Current.Response.Cache.SetNoStore();
}

最後,再建議一下,對於單個文件而言,最好在aspx文件中加上、在CS文件中將以上代碼都加上,鬼才知道用戶瀏覽器支持什麼啊。還是寧多勿少吧。

原創不容易,轉載請註明出處。

相關鏈接:

1、asp.net中的窗體身份驗證(最簡單篇)

2、asp.net中的窗體身份驗證(分目錄驗證篇)

3、asp.net中的窗體身份驗證(完整篇之一:創建asp.net的窗體身份驗證方式)

4、asp.net中的窗體身份驗證(完整篇之二:asp.net的窗體身份驗證過程)

5、asp.net中的窗體身份驗證(完整篇之三:用戶登錄頁面)

6、asp.net中的窗體身份驗證(完整篇之四:獲得用戶數據)

7、asp.net中的窗體身份驗證(完整篇之五:退出登錄)

8、asp.net中的窗體身份驗證(完整篇之附錄:web.config中相應節點詳解)

9、asp.net中的窗體身份驗證(不同的角色訪問不同的目錄)

10、asp.net中的窗體身份驗證(驗證HTML文件)

11、asp.net中的窗體身份驗證(完整篇之六:登出後不能通過後退回來面來的頁面)

本例的下載地址爲:http://www.aspxfans.com/myBlogFile/窗體身份驗證:退出登錄(不能後退).rar 或 http://download.csdn.net/source/2402796

本例在VS2005中測試通過。

————————————————
版權聲明:本文爲CSDN博主「smallfools」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/smallfools/article/details/5630404

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章