asp.net c# - 设置会话然后通过 global.asax 重定向用户

Posted

技术标签:

【中文标题】asp.net c# - 设置会话然后通过 global.asax 重定向用户【英文标题】:asp.net c# - setting session then redirecting users via global.asax 【发布时间】:2017-02-08 02:38:30 【问题描述】:

你好,我正在为此努力,我无法理解大多数问题,因为这是我第一次在 ASP.NET 中开发,这是我的问题。 当用户单击登录页面中的提交然后将它们重定向到 somepage.aspx 时,我声明会话变量

if (dt.Rows.Count > 0)

    Session["usersId"] = usersId;
    Session["usersLevel"] = usersLevel;
    Session["usersRegion"] = usersRegion;
    Session["notification"] = "";
    Response.Redirect("pages/Dashboard.aspx");

所以在那之后我在我的Web.config 中放了一些东西

 <system.web>
    <compilation debug="true" targetFramework="4.0"/>
    <sessionState timeout = "1" mode = "InProc" />
  </system.web>

所以会话当然会过期?/超时?然后在我的Global.asax 我放了这个

void Session_End(object sender, EventArgs e) 


    Response.Redirect("Login.aspx");


但是HttpExeception 上升了,这说明

响应在此上下文中不可用。

为什么没有响应?当它说会话状态模式必须设置为InProc?我只是希望用户在会话到期/超时时被重定向到该页面(我不知道它们的区别,但对我来说看起来一样)

谢谢

【问题讨论】:

尝试在Session_End方法中使用HttpContext.Current.Response.Redirect而不是Response.Redirect重定向到登录页面。 @TetsuyaYamamoto 不,那行不通。该事件没有响应,因为它不是由请求触发的。 当页面过期时,您不会将用户重定向到登录页面,至少不会从服务器重定向。下次他们发出请求时,您可以根据需要重定向他们,因为这将在请求/响应上下文中。或者,您可以尝试使用 javascript 跟踪客户端的会话是否处于活动状态,但这往往会变得混乱。 @mason。石匠的数字,它们是什么意思?? 是的@mason 我明白你想说什么。仅使用Global.asax 就不能解决问题吗?我不想每页都放一个条件检查器。 【参考方案1】:

您可以考虑在 AuthenticateRequest 事件中进行重定向。只有 inProc sessionstate 提供程序支持会话结束事件,并且它可能随时发生(即使在相关请求得到响应之后,这就是您看到该异常的原因)。

【讨论】:

以上是关于asp.net c# - 设置会话然后通过 global.asax 重定向用户的主要内容,如果未能解决你的问题,请参考以下文章

会话变量立即为空.ASP.net核心

了解 ASP.Net 会话生命周期

保持 ASP.NET 会话打开/活动

asp.net cookie、身份验证和会话超时

在 ASP.NET 4.0 环境下使用 c# 进行多文件上传

ASP.NET MVC 4 和会话安全漏洞