Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET会话问题_C#_Asp.net - Fatal编程技术网

C# ASP.NET会话问题

C# ASP.NET会话问题,c#,asp.net,C#,Asp.net,第一项质询。。。。。。 我有一个会话变量cityId,通过它我可以找到所有记录。当我让我的应用程序无人值守一段时间后,会话将过期&它确实获取city的值,然后抛出异常。当会话像这样过期时,如何重定向到错误页面 第二个问题 当我单击某个页面(myprofile.aspx)时,我会检查用户是否登录,如果用户未登录,则重定向到登录页面&如果登录,则显示该页面 如果我让用户登录,如果用户没有登录查看myprofile.aspx,那么当用户登录时,应该直接进入myprofile.aspx页面,而不是登录后

第一项质询。。。。。。 我有一个会话变量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中打开自定义错误时引发会话超时异常。如果仍然坚持在会话超时时重定向用户,请在会话结束事件中使用此选项:

Response.Redirect("myRedirectPage.aspx",true);
您可能希望指定
true
作为重定向后结束响应的第二个参数

至于第二个问题,有几种方法可以处理ASP.NET中的登录。如果你想自己照顾水管

  • 使用应用程序_BeginRequest 在Global.asax文件中的事件 检查用户是否已登录 (即
    会话[“cityId”]
    是否为 空)
  • 将会话信息存储在 登录并使用
    响应。重定向到
    将用户转发到配置文件
    页面
否则,如果要利用内置ASP.NET功能,请参阅


然后按照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
不是基于请求的事件,因此,
响应。重定向在其中不会做任何事情。