【问题标题】:Classic ASP Logout Process经典的 ASP 注销过程
【发布时间】:2011-06-13 02:17:17
【问题描述】:

我正在开发一个经典 asp 开发的网络应用程序。它在顶部菜单上有注销按钮,基本上执行以下操作

  1. Session.Abandon()
  2. 重定向到 Index.asp,用户可以在其中再次登录。

用户注销后返回 index.asp。但是如果用户点击浏览器的后退按钮,他们会转到上一页。我不希望这种情况发生。我想要一条消息说他们已经注销。我已经实施了以下步骤

1.在每页顶部添加Response.Expires=-1Response.CacheControl="no-cache"。 2.在每个页面上,我都在检查会话对象以查看它是否为空。如果为空,我正在创建一条消息,说明他们已经注销并需要再次登录。

现在,当用户在注销后单击返回按钮,而不是显示已注销消息时,我在 IE8 上收到“网页已过期”消息。当用户在登录时单击某个页面上的返回按钮时,我看到了相同的行为。

任何想法我可以如何更好地实现这一点。

谢谢。

【问题讨论】:

  • "Web page expired" 和类似的消息表明,用户回到了一个 POST 的结果页面,浏览器假设页面状态已经改变或者重新发布原始请求可能会导致 Web 应用程序出现问题。

标签: session asp-classic logout


【解决方案1】:

您无法阻止用户反击。解决此问题的常见方案是 POST 以不显示输出但重定向到新位置(可以看到结果的位置)的服务器页面为目标。

【讨论】:

    【解决方案2】:

    还有一些额外的非缓存声明有时会有所帮助:

    Response.Expires = 0
    Response.AddHeader "pragma","no-cache"
    Response.AddHeader "cache-control","private"
    Response.CacheControl = "no-cache"
    

    我前段时间确实读过(因此无法找到链接),将过期设置为 -1 会导致某些浏览器忽略它,而不是让它立即过期。

    即使添加这些额外的缓存控件也不会阻止某些浏览器在某些时候缓存某些内容。 FF 经常会忽略用户强制缓存重新加载,所以在一定程度上你在浏览器中有所帮助。

    关于您的“网页已过期”消息,这是(如前所述)浏览器试图阻止您重新提交 POST 数据(并可能重复您上次所做的)的结果。解决此问题并解决表单上许多其他常见 UI 问题的最佳方法是 POST 回到同一页面,然后如果/当操作完成时,使用 response.redirect 到同一页面,可能使用URL 编码消息表示“全部成功完成”。这允许您的用户刷新并帮助解决后退按钮问题,因为大多数浏览器现在不会在其历史记录中存储正确重定向的页面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      相关资源
      最近更新 更多