2012-07-10 93 views
0

我有一個存儲在PageLoad會話中的Catcha值(安全代碼),當用戶單擊搜索按鈕時將使用該值。如果用戶空閒時間超過20分鐘,則Session的值將過期。當用戶點擊搜索按鈕。它引發錯誤「對象引用未設置到對象的實例」。如何在ASP.NET中的會話超時後重定向或關閉瀏覽器?

在pageLoad的:

if (!IsPostBack) 
     { 
      Session["CaptchaImageText"] = new RandomGen().GenerateRandomCode(); 

     } 

在SearchButtonClick事件:

if (SecurityCodeTextBox.Text.Trim() == Session["Captcha"].ToString()) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 

在這裏,我得到錯誤「對象引用不設置到對象的實例」。 我也檢查了是否Session [「Captcha」]!= null。但它仍然顯示相同的錯誤。

如何重定向或顯示消息「會話超時!再次訪問」並關閉瀏覽器。

在此先感謝!

+0

您可能會發現這有幫助http://stackoverflow.com/questions/4453365/session-end-in-global-asax-cs-not-firing-using-forms-authentication – Devjosh 2012-07-10 14:02:59

回答

0

要關閉瀏覽器,您需要一個客戶端腳本......服務器端無法做到這一點,因此,您可以生成一些JavaScript調用window.close();。對於消息錯誤,請檢查Session []是否爲空,如果您調用某種方法並且它爲空,則會得到這種異常。嘗試這樣的:

if (Session["Captcha"] == null) 
{ 
    Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('Session Timeout! Visit again.'); window.close();", true); 
    return false; 
} 

return (SecurityCodeTextBox.Text.Trim() == Session["Captcha"].ToString()); 
+0

謝謝這對我工作... 。 – 2012-07-10 14:41:39

1

你的代碼看起來像你的Session變量命名不一致(我是這些常量的強大支持者)。

話雖這麼說,來處理你的情況最簡單的方法是

private void Page_Load(object sender, System.EventArgs e) 
{  
    Response.AddHeader("Refresh",Convert.ToString((Session.Timeout * 60) + 5)); 
    if(string.IsNullOrEmpty(Session["Captcha"] as string)) 
    { 
     Server.Transfer("RedirectPage.aspx"); 
    } 
} 

這將導致頁面重定向會話過期。

相關問題