我有会话记录用户的登录信息,但由于我的应用程序结束而丢失。
从本地主机运行我的代码我没有任何问题,但是现在我已经在现场享用午餐,我很快就会在几分钟内失去会话。
我决定记录 Gobal.asax 文件并记录会话何时开始和结束,我的应用程序何时开始和结束,以及是否有任何应用程序错误。
当用户浏览该网站时,会检查会话是否为空,如果会话不为空,我会为该页面注册隐藏字段以使用我的会话值,但如果会话为空,我会放弃它们并重定向到我的登录页面。
这是我的日志显示的内容:
[11:52:25] Application has started
[11:52:25] Session has started
[11:52:35] Use session
[11:52:45] Use session
[11:52:54] Use session
[11:52:59] Use session
[11:53:5 ] Use session
[11:53:10] Use session
[11:53:15] Use session
[11:53:18] Session has ended
[11:53:18] Application has ended
[11:53:22] Application has started
[11:53:23] Session has started
[11:53:23] Abandon Session
[11:53:23] Session has ended
[11:53:23] Session has started
我在同一个超链接上点击 7 次浏览了我的网站,基本上只是刷新了我所在的页面,但由于未知原因,会话丢失并且应用程序已结束。从日志中可以看出,这一切都在一分钟内完成。
单击导航链接时,这是检查会话的代码。
protected override void OnInit(EventArgs e)
{
LogClass Log = new LogClass();
if (this.Session != null && this.Session.Count > 0)
{
Log.Logger("Use session");
string email = (string)this.Session["Email"];
int practiceId = (int)this.Session["PracticeId"];
int practitionerId = (int)this.Session["PractitionerId"];
this.ClientScript.RegisterHiddenField("loggedInUserName", email);
this.ClientScript.RegisterHiddenField("practiceId", practiceId.ToString());
this.ClientScript.RegisterHiddenField("practitionerId", practitionerId.ToString());
}
else
{
Log.Logger("Abandon Session");
this.Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
Response.Redirect("~/Default.aspx");
}
base.OnInit(e);
}
什么可能导致我的会话如此迅速地丢失,为什么在现场托管时只是一个问题而不是本地主机的问题?
是什么导致应用程序结束,因为我没有记录应用程序错误?