我有一个经典的 asp 网站,它使用会话变量来存储登录状态,即。userid、isloggedin 等。在注销时,会话变量被重置,Session.Abandon() 被调用,然后重定向到登录页面。在 IE7 中,我注意到在注销后,我可以输入以前访问过的 url,并查看注销前其状态的缓存版本。点击 ctl-f5 将再次从服务器重新加载并重定向到登录页面。这是我想要发生的行为,即使在没有 ctl-f5 的情况下输入了 url。有谁知道如何获得这种行为?
4 回答
设置无缓存标头,以便页面不会首先被缓存。看:
我认为 mkoryak 的答案(使用无缓存标头)似乎是最好的。如果您希望某些页面仅在用户登录时可见,最好的方法是指示浏览器根本不缓存该页面。此外,诸如调整 cookie 和使用 javascript 之类的方案确实确定了客户端上的登录状态,这只是在重新发明轮子。
如果您想利用一些缓存并且您的页面不是不断更新的东西,那么一个很好的折衷办法是将Response.Expires
标头设置为您认为合适的某个值(我相信它以分钟为单位)。
我以前也遇到过类似的问题,但是每当我点击该页面上的链接时,它都会要求我重新登录。
您可以尝试重置 sessionID = "" 或 sessionID = "XYZ" 并使 XYZ 成为您的代码在注销时忽略的东西。
您也可以尝试设置无缓存标头。
您可以发送 no-cache 但这只是为了获得您想要的东西而对性能造成影响。我更喜欢 Liams 的建议,并确保您在该页面上所做的一切都需要您登录,这样没有人可以做任何他们不应该做的事情。如果它是一个电子邮件系统或类似的系统,人们“可以”查看缓存的其他人的电子邮件,在这些情况下,是的,不缓存敏感信息是可行的方法(例如,默认情况下您不能缓存 HTTPS 页面)。
您还可以在头部包含一些 javascript,它可以检查“登录”cookie 的存在。这将在他们每次加载页面时运行,如果不存在 cookie,那么 JS 可以将您重定向到登录页面。不是 100% 万无一失,但足够好。您的注销页面需要清除此 cookie,然后您的登录页面设置它。