ASP.NET会话问题

时间:2010-11-26 11:13:31

标签: c# asp.net

第一次质询...... 我有一个会话变量cityId,我通过它找到所有记录。当我将我的应用程序无人看管一段时间后会话到期&它确实获得了城市和城市的价值然后抛出异常。当会话过期时,如何重定向到错误页面。

第二次查询

当我点击某个页面(myprofile.aspx)时,我会检查用户是否已被插入,如果用户未插入,则重定向到登录页面&如果loged in然后显示页面 如果我给用户登录,如果用户没有登录查看myprofile.aspx那么当使用登录时应该直接进入myprofile.aspx页面,而不是登录后我提供的任何内容。

帮助我。

3 个答案:

答案 0 :(得分:2)

第一个问题的答案 需要在global.asax文件中处理以下事件

<强> Session_End中

只要单个用户会话结束或超时,就会触发Session_End事件。

第二个问题的答案 需要在global.asax文件中处理以下事件

<强> Application_AuthenticateRequest

Application_AuthenticateRequest事件表示请求已准备好进行身份验证。如果您使用的是表单身份验证,则可以使用此事件来检查用户的角色和权限。

答案 1 :(得分:0)

  

如何重定向到错误页面   当会话到期时会这样。

如果您的页面显示敏感信息,我只会同意这一点。否则,假设用户正在查看页面,并且在空闲时,您只是使用户正在查看的信息消失。当然,在这种情况下你有一个个人资料页面,但如果用户正在查看某种需要时间加载的报告呢?然后,您将强制用户重新运行他/她已经有结果的报告。

您可以像Pranay建议的那样在Global.asax文件中使用Session_End事件。使用AJAX或纯JavaScript,您可以通知用户他们的会话即将超时/已超时。或者不利的是,一旦用户尝试回发并在web.config中打开自定义错误,您可以等到会话超时异常被抛出。如果仍然坚持在会话超时时重定向用户,请在Session_End事件中使用它:

Response.Redirect("myRedirectPage.aspx",true);

您可能希望将true指定为重定向后结束响应的第二个参数。

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

  • 使用Application_BeginRequest 您的Global.asax文件中的事件 检查用户是否已登录 (即Session["cityId"]是否为Response.Redirect 空)
  • 存储您的会话信息 登录并使用Request.UrlReferrer来 将您的用户转发到个人资料 页。

否则,如果您想利用内置的ASP.NET功能,请参阅http://msdn.microsoft.com/en-us/library/ms178329.aspx

然后只使用{{1}}作为Srinivas建议。

答案 2 :(得分:0)

在我的应用程序中,我不会在会话过期时重定向,但我会重定向到用户执行的NEXT操作的登录页面。换句话说,他们可以坐下来盯着一个页面几个小时,即使会议到期也不会发生任何事情 - 直到会请求不同的页面。在每个page_load的开头,我做的第一件事就是检查它们是否仍然“登录”,如果没有,它们会被重定向:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["myUser"] != null)
            myUser = (User)Session["myUser"];
        else
            Response.Redirect("Login.aspx?Mode=Timeout");