在C#/ ASP.NET中注销(Session.Abandon)后禁止访问页面

时间:2010-06-29 18:11:59

标签: c# asp.net

我有兴趣在退出后禁止以下内容:

- 没有后退按钮

- 无法通过URL直接访问页面 - 例如:如果用户注销,则不应允许他们使用某个URL查看缓存页面(例如,使用网站中的有效URL替换URL {{ 3}})

我见过类似这样的问题:http://mysite.com/Gotothispage.aspx

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

如果安全设置正确,则应该在注销后禁用页面。

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

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

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

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

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);

    if (!IsLoggedIn)
    {
        Response.Redirect("default.aspx");
    }
}

编辑:

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

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

Gmail可以做到这一点,但有时它会如此之快,你无法分辨。

答案 2 :(得分:0)

  

然后我失去了使用它的能力   当用户实际上是后退按钮   登录。我是否正确   理解?

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

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

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

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