2012-06-04 38 views
0

我面臨一個問題,因爲我的用戶在出現在多選在線考試中時正在註銷頻率。會話成爲​​空

我們在單個頁面上實施了考試,並在用戶選擇相同的狀態時將選項存儲在視圖狀態中。在選擇下一個問題頁面時再次加載。某時「如果會話(」用戶「)=」「」結果爲true並且用戶註銷。

我沒有設置會話上首次頁載荷

查看Session.Timeout = 340

同樣在web配置文件會話超時是2小時。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If Session("User") = "" Then 
     Response.Redirect("Default.aspx") 
    Else 
     //Processing and updating view state. 

請通過查看此

+1

您還需要將Forms身份驗證超時設置爲2小時。 – TheGeekYouNeed

+0

有幾個問題:首先,您是使用inproc還是使用proc會話狀態?您是否檢查過Windows事件日誌中可能表明應用程序正在回收的消息? –

+0

@ TheGeekYouNeed-謝謝,似乎我沒有設置論壇認證超時。我做了一個快速的分組,似乎下面的電話會設置相同的。 System.TimeSpan.FromMinutes(120)。請回復這個。 – Tectrendz

回答

1

可能是程序池回收得到的原因。這裏有一些原因是:

  1. 您的sessionState超時過期
  2. 你更新你的web.config或其他文件類型,導致你的AppDomain回收
  3. 你在IIS應用程序池回收
  4. 你用大量文件更新您的網站,並且ASP.NET主動銷燬您的AppDomain以重新編譯並保留內存。
  5. 或者可能刪除任何文件或目錄。

編號:Losing Session State

解決方法:使用StateServer的,而不是InProc方式。

<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" cookieless="UseCookies" timeout="10" regenerateExpiredSessionId="true" /> 

http://msdn.microsoft.com/en-us/library/ms972429.aspx

+0

感謝添加狀態服務器解決問題 – Tectrendz

0

我面對這個問題earlier.Please在解決方案中添加此代碼。

public int SessionLengthMinutes 
    { 
     get { return Session.Timeout; } 
    } 
    public string SessionExpireDestinationUrl 
    { 
     get { return "../Login.aspx"; } 
    } 
    protected override void OnPreRender(EventArgs e) 
    { 
     base.OnPreRender(e); 
     this.Controls.Add(new LiteralControl(
     String.Format("<meta http-equiv='refresh' content='{0};url={1}'>", 
     SessionLengthMinutes * 60, SessionExpireDestinationUrl))); 
    } 

這個你可以在你的頁面從主網頁重定向什麼時候檢查登錄page.Then我們可以進一步工作,解決了這個問題。 希望它適合你。