设置Session变量后不要重定向

时间:2014-07-14 08:34:01

标签: asp.net session redirect

重定向到某个页面时遇到问题。 请查看我的代码以及我如何解决它。 清单是在会话中保存变量并重定向到新页面后,会话变量丢失,并创建新的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); 
        }

提前谢谢

1 个答案:

答案 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