【问题标题】:Session timeout in ASP.NET page added in MVC project for rendering SSRS report在 MVC 项目中添加的 ASP.NET 页面中的会话超时以呈现 SSRS 报告
【发布时间】:2016-12-09 11:07:54
【问题描述】:

我已经用 Angular 开发了 ASP.NET MVC 应用程序。后期我发现我的公司正在使用基于 SSRS 的报表解决方案来满足所有报表需求,因此我添加了一个 .aspx 页面来使用报表查看器控件显示这些报表。

这里的问题是,我想检查 .aspx 页面中的 Session 是否过期,并调用 MVC 的注销操作方法并将用户重定向到 MVC 的登录操作方法。

请帮助我如何实现这一目标?

谢谢, 维杰

【问题讨论】:

    标签: c# asp.net angularjs asp.net-mvc reporting-services


    【解决方案1】:

    检查页面中是否存在 Session 对象,如果您在会话中设置用户名,则当会话过期时,它将为空。 :

    if (Session["UserName"] != null)
    {
       // Session has not expired
    }
    else
    {
        // Redirect To login since session expired
    }
    

    您可以使用 web.config 中 sessionState 元素的 timeout 属性以分钟为单位增加超时值。

    默认情况下,ASP.NET 使用 cookie 来识别哪些请求属于特定会话。如果 cookie 不可用,可以通过将会话标识符添加到 URL 来跟踪会话。要禁用 cookie,请设置 sessionState cookieless="true"。

    <sessionState mode="StateServer" cookieless="false" timeout="120"/>
    

    【讨论】:

    • 请在下面找到我的评论,因为评论部分不允许我写超过 600 个字符:)
    【解决方案2】:

    感谢您的建议,我尝试添加此代码 sn-p,但问题是当会话超时时,我希望我的 aspx 页面自动从控制器调用 Logout 方法,然后我希望相同的 aspx 页面应该重定向到登录页面?

    我添加了这个场景以使用 aspx 页面的 OnPreRender(EventArgs e) 自动调用 Logout 控制器方法,并添加下面的代码 sn-p 里面

    protected void base.OnPreRender(e){
        Controls.Add(new LiteralControl(
        String.Format("<meta http-equiv='refresh' content='{0};url={1}'>",
        Session.Timeout * 60, "/main.mvc/logout?random=report")));
    }
    

    它像上面的代码一样调用 Logout 方法,但后来我收到错误页面,状态类似于“报告执行 mt1vqsixnjiff145dvbe1o55 已过期或找不到。(rsExecutionNotFound)”。而是这个黄色错误页面我想将用户重定向到登录控制器方法。

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 2013-06-06
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多