【问题标题】:Disable access to pages after logout (Session.Abandon) in C#/ASP.NET在 C#/ASP.NET 中注销后禁用对页面的访问 (Session.Abandon)
【发布时间】:2010-06-29 18:11:58
【问题描述】:

我有兴趣在注销后禁止以下操作:

-- 没有返回按钮

-- 不能通过 URL 直接访问页面 - 例如:如果用户注销,则不应允许他们使用某些 URL 看到缓存页面(例如,将 URL 替换为站点中的有效 URL @987654321 @)

我见过类似这样的问题:How to disable the back button in browser when user logout in asp.net c#

我知道我可以在母版页上设置不缓存,但是当用户实际登录时我失去了使用后退按钮的能力。我的这种理解是否正确?

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    页面要么可缓存,要么不可缓存,浏览器不知道您是否已登录。您不能以某种方式追溯过期已被浏览器缓存的对象。

    【讨论】:

    • 好点并且理解 - 我试图避免另一个用户转到前一个用户的特定 URL(在前一个用户注销后)并且可以看到缓存页面的情况 - 这有敏感数据。
    【解决方案2】:

    然后我就无法使用 用户实际在时的后退按钮 登录。我在这方面是否正确 理解吗?

    不完全是 - 在使用 POST 而不是 GET 提交的页面上使用后退按钮会遇到问题。

    一个简单的例子是想象一个带有分页 Gridview 的 ASP.NET 页面 - 用户单击页面 1、2、3、4、5 等来导航网格。

    使用 POST,每次用户单击网格中的另一个页面时,都会导致回发到同一页面。如果用户在执行此操作后单击返回,则会出现页面过期错误。

    使用 GET,每次用户单击网格中的另一个页面时,它都会使用查询字符串(即 Grid.aspx?Page=2)将它们重定向到同一页面。在这种情况下,用户可以点击返回,它会毫无问题地将他们带到上一页。

    【讨论】:

    • 不幸的是,这是一个已经“构建”的系统和大量与回发等相关的代码。 “漂亮”(更小 - 无参数)的 URL 也是非常受欢迎的。
    • 所以在再次阅读回复后(谢谢大家顺便说一句)似乎我唯一的选择是 1)让用户看到缓存的页面;或 2) 在页面上设置无缓存,继续使用 POST,这将不允许用户使用浏览器返回页面;或3)设置无缓存,更改为GET?
    【解决方案3】:

    如果您的安全设置正确,则退出后页面应该已被禁用。

    如果您有专门针对已登录用户的母版页或基页类,则应检查他们是否具有您在登录时设置的 sessionId。

    如果没有,请将它们重定向到另一个页面。

    用户可能会看到页面的缓存版本,但无法对其执行任何操作。

    在我的成员基页类中,我检查他们是否在 OnInit 事件中登录:

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
    
        if (!IsLoggedIn)
        {
            Response.Redirect("default.aspx");
        }
    }
    

    编辑:

    有些网站所做的是......在您注销此人后,他们会将您重定向到一个临时的炼狱页面,上面说它正在注销您。此炼狱页面将关闭缓存,并有一个元刷新标签,可将您带到您的目标页面。

    因此,当用户单击后退按钮时,它会将他们带到炼狱页面,然后将他们引导回原来的位置。

    Gmail 可以做到这一点,但有时速度快到你无法判断。

    【讨论】:

    • 查看缓存页面是问题所在 - 即,如果用户使用共享机器并注销站点,则其他人可以使用该机器并单击返回历史记录并查看一些页面。
    • 是的,Damien 的观点比我原先做得更好——这是我试图避免的。
    猜你喜欢
    • 1970-01-01
    • 2014-07-15
    • 2013-11-26
    • 1970-01-01
    • 2016-12-15
    • 2021-10-17
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    相关资源
    最近更新 更多