2010-06-29 48 views
0

我感兴趣的禁止注销后执行以下操作:禁止访问页面注销后(Session.Abandon)在C#/ ASP.NET

- 没有后退按钮

- 不能直接访问通过URL的页面 - 例如:如果用户注销,那么他们不应该被允许使用某个URL看到缓存页面(例如,用网址http://mysite.com/Gotothispage.aspx中的有效URL替换URL)

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

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

回答

2

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

+0

好点和理解 - 我只是为了避免其他用户转到上一个用户的特定URL(在上一个用户注销后)并且可以看到一个缓存页面的情况 - 该缓存页面上有敏感数据。 – 2010-06-29 19:03:52

0

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

如果你有一个母版页或BasePage类专为登录的用户,你应该检查他们是否有你,当他们登录设置的sessionId。

如果他们不这样做,他们重定向到另一页。

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

在我的会员BasePage类,我检查,如果他们登录上的OnInit事件:

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

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

编辑:

什么有些网站is..after您登录的人员关闭,他们将您重定向到一个临时炼狱页面,表明它正在注销您。此炼狱页面将关闭缓存,并有一个元刷新标记,可将您带到目标页面。

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

Gmail会这样做,但有时候速度太快,您无法辨别。

+0

看到缓存页面是问题 - 即,如果用户正在使用共享机器并注销网站,另一个人可以使用该机器并单击历史记录并查看一些页面。 – 2010-06-29 18:24:42

+0

是的,达米恩提出的要比我最初的要好 - 这就是我想要避免的。 – 2010-06-29 19:04:24

0

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

并非完全 - 您在使用POST提交的页面上使用后退按钮时遇到问题,但无法使用GET。

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

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

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

+0

不幸的是,这是一个已经“内置”的系统和大量与回发等相关的代码。此外,“漂亮”(小 - 无parms)的网址是非常喜欢的。 – 2010-06-29 19:05:51

+0

所以再次重新阅读答复(谢谢大家顺便说一句),似乎我的唯一选择是1)让用户看到缓存页面;或2)在页面上设置no-cache,继续使用POST,这将禁止用户使用浏览器返回页面;或3)设置no-cache,更改为GET? – 2010-06-29 19:10:18