我构建了一个购物车,它使用会话状态在用户浏览商店时保留购物车数据。
我遇到一个问题,如果我在购物车的第 1 步上长时间打开浏览器窗口,然后按“转到第 2 步”,我的操作会引发错误,因为第 2 步操作假定会话尚未过期并且ShopCart 对象处于正确状态。
我希望这种情况对我的用户来说更好,但我认为我需要以某种方式检测会话是否已过期,以便在下一个请求时我可以将它们扔到第 1 步。
我发现下面的代码声称可以解决问题,但它对我不起作用。
IsNewSession 条件为 true,但条件
if ((null != sessionCookie) && (sessionCookie.IndexOf("ASP.NET_SessionId") >= 0)) {
// handle expired session
}
总是返回 false 并且它从不处理无效会话。我很困惑。
这在 ASP.NET(和 MVC)中可能吗?
Way 1
将此代码放入Init
/ Load
第2页的事件...
if (Context.Session != null)
{
if (Context.Session.IsNewSession)
{
string sCookieHeader = Request.Headers["Cookie"];
if ((null != sCookieHeader) && (sCookieHeader.IndexOf("ASP.NET_SessionId") >= 0))
{
if (Request.IsAuthenticated)
{
FormsAuthentication.SignOut();
}
Response.Redirect("Error Page");
}
}
}
Way 2
或者您可以检查是否Session
在第 2 页中继续使用该对象之前,该对象已存在,如下所示:
if (Session["Key"] != null)
{
Object O1 = (Object) Session["Key"];
}
else
{
Response.Redirect("ErrorPage.aspx");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)