C# ASP.NET会话问题
第一项质询。。。。。。 我有一个会话变量cityId,通过它我可以找到所有记录。当我让我的应用程序无人值守一段时间后,会话将过期&它确实获取city的值,然后抛出异常。当会话像这样过期时,如何重定向到错误页面 第二个问题 当我单击某个页面(myprofile.aspx)时,我会检查用户是否登录,如果用户未登录,则重定向到登录页面&如果登录,则显示该页面 如果我让用户登录,如果用户没有登录查看myprofile.aspx,那么当用户登录时,应该直接进入myprofile.aspx页面,而不是登录后我提供的任何内容 帮帮我。第一个问题的答案 需要在global.asax文件中处理以下事件 会话结束 每当单用户会话结束或超时时,都会触发会话结束事件 第二个问题的答案 需要在global.asax文件中处理以下事件 应用程序\u AuthenticateRequest Application_AuthenticateRequest事件表示请求已准备好进行身份验证。如果您使用的是表单身份验证,则此事件可用于检查用户的角色和权限 如何重定向到错误页面 当会话像这样过期时 我只会同意这一点,如果你的网页显示敏感信息。否则,假设用户正在查看页面,在空闲时,您只是让用户正在查看的信息消失。当然,在这种情况下,您有一个配置文件页面,但是如果用户正在查看某种需要时间加载的报告,该怎么办?然后,您将强制用户重新运行他/她已经有结果的报告 您可以按照Pranay的建议在Global.asax文件中使用Session_End事件。使用AJAX或普通JavaScript,您可以通知用户其会话即将超时/已超时。或者相反,您可以等到用户尝试回发并在web.config中打开自定义错误时引发会话超时异常。如果仍然坚持在会话超时时重定向用户,请在会话结束事件中使用此选项:C# ASP.NET会话问题,c#,asp.net,C#,Asp.net,第一项质询。。。。。。 我有一个会话变量cityId,通过它我可以找到所有记录。当我让我的应用程序无人值守一段时间后,会话将过期&它确实获取city的值,然后抛出异常。当会话像这样过期时,如何重定向到错误页面 第二个问题 当我单击某个页面(myprofile.aspx)时,我会检查用户是否登录,如果用户未登录,则重定向到登录页面&如果登录,则显示该页面 如果我让用户登录,如果用户没有登录查看myprofile.aspx,那么当用户登录时,应该直接进入myprofile.aspx页面,而不是登录后
Response.Redirect("myRedirectPage.aspx",true);
您可能希望指定true
作为重定向后结束响应的第二个参数
至于第二个问题,有几种方法可以处理ASP.NET中的登录。如果你想自己照顾水管
- 使用应用程序_BeginRequest
在Global.asax文件中的事件
检查用户是否已登录
(即
是否为 空)会话[“cityId”]
- 将会话信息存储在
登录并使用
响应。重定向到 将用户转发到配置文件 页面
然后按照Srinivas的建议使用
Request.urlReferer
。在我的应用程序中,我不会在会话到期时重定向,但会在用户执行的下一个操作中重定向到登录页面。因此,换句话说,他们可以坐着盯着一个页面数小时,即使会话过期,也不会发生任何事情,直到他们请求另一个页面。在每次页面加载开始时,我要做的第一件事是检查他们是否仍然“登录”,如果没有,他们将被重定向:
protected void Page_Load(object sender, EventArgs e)
{
if (Session["myUser"] != null)
myUser = (User)Session["myUser"];
else
Response.Redirect("Login.aspx?Mode=Timeout");
您可能应该将此问题分为两个独立的问题。@user373083-转到msdn或serach about global.asax将给出您的全部想法session\u End仅在会话为“inProc”时提出。
session\u End
不是基于请求的事件,因此,响应。重定向在其中不会做任何事情。