【问题标题】:How to clear all history when user is logout in ASP.NET?用户在 ASP.NET 中注销时如何清除所有历史记录?
【发布时间】:2012-02-14 06:21:20
【问题描述】:

当用户注销时,我想清除所有历史记录和缓存。使用户无法返回页面。

出于这些目的,我在 login.aspx 页面上使用以下内容:-

  if (Request.QueryString["action"] == "logout")
        {

            FormsAuthentication.SignOut();
            Session["CurrentUser"] = null;
            Session["IsJobPoster"] = null;
            Session["AdminEmail"] = null;
            Session["IsAdmin"] = null;
            Response.Buffer = true;
            Response.ExpiresAbsolute = DateTime.UtcNow.AddDays(-1d);
            Response.Expires = -1500;
            Response.CacheControl = "no-cache";


    }

但是用户可以在注销后返回到后台。

请给我推荐可用的链接或示例代码。

【问题讨论】:

  • 人力资源管理。通常FormsAuthentication.SignOut() 应该这样做。故事一定有更多内容
  • 我不确定您是否在使用会员服务提供商。如果您是,提供商将为您删除 cookie 并将用户重定向到登录页面。用户返回后,应再次将用户重定向到登录页面。在 ASP.NET MVC 中使用表单身份验证:msdn.microsoft.com/en-us/library/ff398049.aspx 并在 ASP.NET 2.0 中使用成员身份msdn.microsoft.com/en-us/library/ff648345.aspx
  • 您不能删除客户端的浏览器历史记录,这是由网络浏览器控制的,不能从网页上弄乱。

标签: asp.net .net asp.net-mvc-3 c#-4.0


【解决方案1】:

另外,您是否有理由不使用 Session.Abandon() 代替?您应该考虑这一点,尤其是当您获得更多会话变量时,它会更容易维护。

【讨论】:

  • 你是对的 session ,我正在使用 Session.Abandon 。但我还想在用户注销时清除所有缓存历史记录。使用查询字符串 action=logout 重定向到登录页面。
【解决方案2】:

不确定 .Net,但通常使用 POST 和使页面过期(通过适当的响应标头)和使用 HTTP 重定向应该会删除历史记录。此外,如果使用 cookie 来维护会话,那么用一些垃圾覆盖 cookie 也会有所帮助。

【讨论】:

  • 您不能删除客户端的历史记录,这是由浏览器控制的。
  • 我的意思是返回按钮历史(-1)页面将过期。不是完整的浏览历史记录。
  • 正如我所说,您不能从网页中删除 javascript / 中的后退按钮历史元素,归根结底,这是浏览器控制的行为,而不是站点控制的行为。想想如果垃圾邮件网站可以删除/更改/阅读您的浏览器历史记录,这将导致的所有滥用。
【解决方案3】:

我猜你看到的是页面的客户端缓存版本。

将缓存调用(Expires、CacheControl)移到 if 语句之外。您希望它们在每次请求时都执行,以便需要登录的页面不会被缓存在客户端。然后,浏览器将在返回历史记录时通知用户该页面无效/旧/过时,需要刷新。这将启动一个新请求,该请求应将用户重定向到登录页面。

【讨论】:

    【解决方案4】:

    用户在注销后能够看到的上一个页面肯定是缓存在客户端中的页面。所以你要做的就是写这样的代码(从你的复制而来):

    Response.ExpiresAbsolute = DateTime.UtcNow.AddDays(-1d);
    Response.Expires = -1500;
    Response.CacheControl = "no-cache";
    

    在登录用户正在查看的页面中,以便这些页面不会缓存在浏览器中。有意义吗?

    【讨论】:

    • @Sushant,我认为您的代码没有问题。问题是您放置代码的位置。您可以将其应用于需要身份验证的页面(例如 /account/details、/account/profile 等),而不是在注销页面中编写该代码。如果您将此代码应用于这些页面,则它们不会缓存在浏览器中,因此当用户单击后退按钮时,它们将被重定向到登录页面(正是因为浏览器中没有缓存页面)。
    • 换句话说,您不会在注销时清除浏览器缓存。你只是,不要让浏览器缓存你的认证页面。
    猜你喜欢
    • 2014-03-06
    • 1970-01-01
    • 2016-09-02
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 2016-08-14
    相关资源
    最近更新 更多