1
鑑於這一的Global.asax.cs:會話變量正在丟失?
using System;
using System.Web;
namespace Foo.Web {
public class Global : HttpApplication {
private const string IntroductionPageShownSessionKey = "IntroductionPageShownSessionKey";
protected void Application_AcquireRequestState(object sender, EventArgs e) {
ShowIntroductionIfNotYetShown();
}
private void ShowIntroductionIfNotYetShown() {
if (HttpContext.Current.Session != null) {
var introductionPageShown = Convert.ToBoolean(Session[IntroductionPageShownSessionKey]);
if (!introductionPageShown) {
if (Request.Path.EndsWith("/Introduction.aspx")) {
Session[IntroductionPageShownSessionKey] = true;
}
else {
Response.Redirect("~/Introduction.aspx" + Request.Url.Query);
}
}
}
}
}
}
- 用戶點擊web應用並且被示出Introduction.aspx
- 用戶繼續使用web應用幾分鐘(ASP.NET_SessionId:ublbhu45ji31e055ywqu0555)
- 用戶幾分鐘後空閒(不執行任何回發)
- 用戶執行回發
- 用戶顯示Introduction.aspx
- 用戶ASP.NET_SessionId餅乾的第二次檢查仍顯示ublbhu45ji31e055ywqu0555
爲什麼用戶顯示Introduction.apsx同一ASP.NET會話內第二次?我很熟悉瓦特/ the risk in setting session variables just before a redirect in the same postback,但這不適用於此,對吧?
「幾分鐘」多久?足夠長的時間讓會話超時? – 2010-09-22 15:53:07
回答你的問題:不可以。我的意圖/包括會話ID是爲了證明會話永不超時。我的理解是,我們在這種情況下只處理單獨的會話。 – lance 2010-09-22 15:54:52
會話ID cookie的值實際上並不直接與會話的生命週期相關聯;也就是說,即使cookie值仍然有效,發送和接受,會話仍可能超時。我要做的第一件事是檢查會話的超時值,並確保AppDomain沒有被回收。 – 2010-09-22 15:56:13