2013-04-01 51 views
1

當用戶登錄到網站時,我創建了5個會話變量,其中包含一些與用戶相關的值(如userid,roleid等)。根據存儲在會話變量中的其中一個值,我必須更新數據庫中的記錄。要做到這一點,我這個在這裏寫了下面的代碼Session_End()事件的Global.asax會話變量值在Global.asax中並不總是可用Session_end

if (Session["UserHistoryID"] != null) 
     SessionUtility.UpdateDatabase(Convert.ToInt32(Session["UserHistoryID"])); 

的問題是,當會話超時,Session_End火災Session變量Session["UserHistoryID"]NULL一些時間和上述條件失敗並且數據庫中的記錄未更新。當在我的本地系統中測試它時,它工作正常,但是當我在生產服務器上測試時,有些記錄沒有更新

爲什麼會發生這種情況?

有人請說明Session_End的工作原理。

我到處搜索,但無法找到解決方案。

回答

0

如果我宣佈了我想在Session_End中的事件訪問和會話的值存儲在這個變量,並在我的功能使用聲明的變量,它正在每個會話值的變量罰款

void Session_End(object sender, EventArgs e) 
{ 
    int var=0; 
    if (Session["value"] != null) 
    { 
     var = Convert.ToInt32(Session["value"]); 
     UpdateToDatabase(var); 
    } 
} 
1

我認爲,最早可能在你能獲得SessionApplication_AcquireRequestState在這裏提到Sessions and Global.asax所以你可以寫這樣的事情在你的Global.asax

void Application_AcquireRequestState(object sender, EventArgs e) 
    { 
     if (System.Web.HttpContext.Current.Session != null) 
     { 
      if (Session["language"] != null) 
      { 
       Response.Write(Session["language"].ToString()); 
      } 
     } 
    } 

希望這將幫助!

+0

我想在會話過期時訪問會話值並在那裏執行某些操作,而不是在創建時進行操作 – seadrag0n