重定向到某个页面时遇到问题。 请查看我的代码以及我如何解决它。 清单是在会话中保存变量并重定向到新页面后,会话变量丢失,并创建新的sessionId。 我是新手。请指教。
的Login.aspx:
Util.IsAdminUser= false; // save in session Util.IsAdminUser
Util.IsSpecialUser = true; //save in session Util.IsSpecialUser
Response.Redirect(Pages.SelectAccounts, false);
return;
SelectAccounts.aspx:
Page_Load(object sender, EventArgs e)
{
if (!Util.IsAdminUser) // error of null, session is lost
{
...
...
}
}
protected void Session_Start(object sender, EventArgs e)
{
LoggerNet.Info("SessionId:" + Session.SessionID);
}
提前谢谢
答案 0 :(得分:1)
根据MSDN article:
对于移动网页,如果您的应用依赖于无Cookie会话, 或者可能会收到需要无cookie的移动设备的请求 会话,在路径中使用波形符
(~)
可以创建新会话和 可能丢失会话数据。在移动控件上设置属性
使用~/path
之类的路径,使用ResolveUrl
解析路径 在将其分配给财产之前~/path
。
因此,如果~
常量中有Pages.SelectAccounts
,则每次都可能有一个新的会话。尝试在重定向之前添加ResolveUrl
方法
也许你应该切换到Server.Transfer方法,它执行类似的操作,但没有往返客户端。有关更多信息,请参阅MSDN:
How to: Redirect Users to Another Page
Correct use of System.Web.HttpResponse.Redirect
<强>更新强>
你也应该检查这个答案:
ASP.NET: Session.SessionID changes between requests
尝试使用Session
文件中的Global.asax
对象来处理Session_Start
事件 - 这会锁定当前用户的SessionId
,但不会再次改变。
更新#2 :
你必须将一些变量设置到Session
对象中,如下所示:
protected void Session_Start(object sender, EventArgs e)
{
LoggerNet.Info("SessionId:" + Session.SessionID);
Session["LastVisitDate"] = DateTime.Now;
}
只有在调用Session
对象的 setter 之后,您才会拥有该用户的持久SessionId
。