2009-07-29 82 views
4

我有一个经典的ASP网站,使用会话变量来存储登录状态ie。 userid,isloggedin等。在注销时,会话变量被重置,并且Session.Abandon()被调用,然后被重定向到登录页面。在IE7中,我注意到在注销后,我可以输入以前访问过的URL并查看在注销之前似乎是其状态的缓存版本。点击ctl-f5将再次从服务器重新加载并重定向到登录页面。这是我想要发生的行为,即使没有ctl-f5输入url也是如此。有谁知道如何得到这种行为?IE7经典ASP缓存

回答

1

我以前遇到过类似问题,但每当我点击该网页上的链接,它让我重新登录

你可以尝试要么复位会话ID。 =“”或sessionID =“XYZ”,并使XYZ在注销时忽略您的代码。

你也可以尝试设置no-cache标头。

0

你可以发送no-cache,但是这只是一个安静的表现,只是为了得到你想要的东西。我更喜欢Liams的建议,并确保您在该页面上做的所有事情都需要您登录,这样,没有人可以做任何他们不应该做的事情。如果它的电子邮件系统虽然或类似,但人们“可以”查看其他人的电子邮件,那么在那些情况下是的,而不是缓存敏感信息是要走的路(例如,你不能默认缓存HTTPS页面)。

您还可以在头部添加一些javascript,以检查是否存在“已登录”Cookie。这会在每次加载页面时运行,如果没有cookie存在,那么JS可以将您重定向到登录页面。不是100%的证明,但足够好。你注销页面需要清除这个cookie,并在你的登录页面设置它。

2

我认为mkoryak的答案(使用no-cache标头)似乎是最好的。如果您只想在用户登录时看到某些页面,最好的方法是指示浏览器不要缓存该页面。此外,诸如调整cookie和使用javascript等方案确定客户端的登录状态只是重新发明轮子。

如果你想利用一些缓存,并且你的页面不是不断更新的,那么一个很好的折衷办法是将Response.Expires标题设置为你认为合适的值(我认为它是以分钟为单位的度量)。