我在ASP.NET中拥有网站。我们有两种登录方式 1.用户 2.管理员
我在测试期间遇到以下问题
问题陈述:假设我通过用户登录登录并浏览所有页面,让我们在用户的任何页面点击退出按钮,它会在登录页面重定向我。
现在问题来了,当我使用浏览器时,它显示了我的用户页面但实际上我不应该在注销后查看该页面。
我的功能是正确的,因为如果我在注销后点击页面,它将再次在登录页面重定向我,但我的问题是我不应该在注销后使用浏览器返回用户页面。 [正如谷歌和雅虎所发生的那样]
管理员登录也是如此。
请帮我解决问题。
答案 0 :(得分:3)
问题是您可以按回来缓存的页面。您可以指示浏览器每次都始终从服务器获取页面。
您需要生成以下所有标题:
Pragma: no-cache
Cache-Control: max-age=1
Expires: Tue, 1 May 1985 01:10:00 GMT
问题并非所有浏览器都支持所有选项,因此您必须包含所有这些标头,以确保所有浏览器都不会缓存您的网页。
需要所有这些标头的另一个原因是,在某些情况下,即使Web浏览器遵守过期标头,您和仍在缓存页面的用户之间也可能存在配置错误的代理服务器。
在ASP中你可能想做这样的事情:
public void Page_Load() {
Response.ExpiresAbsolute = DateTime.Now.AddDays(-1d);
Response.Expires = -1500;
Response.CacheControl = "no-cache";
Response.Cache.SetETag(randomString);
}
答案 1 :(得分:1)
您必须禁用缓存。
public void Page_Load()
{
Response.Cache.SetCacheability(HttpCacheability.NoCache)
...
}
答案 2 :(得分:1)
你必须设置以下我猜
Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
Response.Cache.SetValidUntilExpires(false);
Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
当用户按下后退按钮时,这将导致您的页面回发,因此您可以检查他是否仍然登录,以防将他重定向到其他地方。
答案 3 :(得分:1)
答案 4 :(得分:0)
您如何登录/退出?这样做的一种正确方法是在登录时将用户信息保存到会话中,并在注销时清除该会话 在每个页面的PageLoad方法测试,如果会话有有效的信息或没有,如果没有停止页面加载。 这样,当用户注销并单击后面时,会话应为空并且不会加载,然后您可以重定向到登录页面。 如果您需要一些代码,请回复