【问题标题】:ASP.NET Session ProblemASP.NET 会话问题
【发布时间】:2010-11-26 11:13:31
【问题描述】:

第一个查询...... 我有一个会话变量 cityId,通过它我可以找到所有记录。当我让我的应用程序无人看管一段时间后,会话过期并且它确实获得了 city 的值,然后引发异常。当会话像这样过期时,我如何重定向到错误页面。

第二次查询

当我单击某个页面(myprofile.aspx)时,我会检查用户是否已登录,如果用户未登录则重定向到登录页面,如果已登录则显示该页面 如果我让用户登录,如果用户没有登录查看 myprofile.aspx,那么当用户登录时,它应该直接进入 myprofile.aspx 页面,而不是我在登录后提供的任何页面。

帮帮我。

【问题讨论】:

  • 你应该把它分成两个单独的问题。

标签: c# asp.net


【解决方案1】:

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

Session_End

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

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

Application_AuthenticateRequest

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

【讨论】:

  • @user373083 - 去 msdn 或 serach 了解 global.asax 会给你完整的想法
  • Session_End 仅在会话为“inProc”时引发。
【解决方案2】:

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

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

您可以按照 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 将您的用户转发到个人资料 页面。

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

然后按照 Srinivas 的建议使用 Request.UrlReferrer

【讨论】:

  • Session_End 不是基于请求的事件,因此 Response.Redirect 不会在其中做任何事情。
【解决方案3】:

在我的应用程序中,我不会在会话到期时重定向,但我会在用户执行 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");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    相关资源
    最近更新 更多