【问题标题】:Don't redirect after setting a Session variable设置 Session 变量后不要重定向
【发布时间】:2014-07-14 08:34:01
【问题描述】:

重定向到页面时遇到问题。 请查看我的代码以及如何解决它。 清单是在会话中保存变量并重定向到新页面后,会话变量丢失,并创建了新的sessionId。 我是新手。请指教。

登录.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); 
        }

提前谢谢你

【问题讨论】:

  • 如何存储会话?你能展示Util类和CheckSessionExpired();方法吗?
  • 在 Util 我设置 Session["IsAdmin"] = false,Session["IsSpecialUser"]=true。无论如何..我猜这是在会话中保存数据和重定向的问题..我不知道是什么原因导致这种行为以及什么是好的做法..
  • 你如何存储你的会话? InProc、SQL 等
  • 在 SQL 中保存会话
  • In Util i set Session["IsAdmin"] = false 根据您的评论,结果将始终为 false。请添加Util.IsAdminUser的实际代码。

标签: asp.net session redirect


【解决方案1】:

根据MSDN article

对于移动页面,如果您的应用程序依赖于无 cookie 会话, 或者可能会收到来自需要无 cookie 的移动设备的请求 会话,在路径中使用波浪号 (~) 可以创建一个新会话并 可能会丢失会话数据

在移动控件上设置属性
对于 ~/path 等路径,请在将路径分配给属性之前使用 ResolveUrl
~/path 解析路径。

因此,如果您的 Pages.SelectAccounts 常量中有一个 ~,那么您可能每次都有一个新的 Session。尝试在重定向前添加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

尝试使用Global.asax 文件中的Session 对象来处理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

【讨论】:

  • 我已经有 Session_Start 事件并且我没有使用无 cookie 会话或移动页面
  • @user2483797 能否提供Session_Start 代码?你在里面使用 Session 对象的 setter 吗?
  • 更新了,请看
  • @user2483797,是的,我看到了。您不会为Session 调用任何设置器,因此每次调用新页面时该对象都会是一个新对象。尝试在那里存储一些信息。否则我不知道为什么它不起作用。
猜你喜欢
  • 2014-03-23
  • 2014-03-18
  • 2014-08-25
  • 1970-01-01
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 2013-08-25
  • 1970-01-01
相关资源
最近更新 更多