注销后禁用浏览器“返回”按钮?

Posted

技术标签:

【中文标题】注销后禁用浏览器“返回”按钮?【英文标题】:Disable browser 'Back' button after logout? 【发布时间】:2011-10-18 21:04:06 【问题描述】:

我正在使用 python 和 django 我希望用户在注销后单击返回按钮时重定向到登录页面。如何做到这一点?代码在哪里写?

为了测试 django admin 是否处理这个..我登录到 django admin..注销然后点击返回按钮,我可以看到上一页。为什么 django admin 不处理这个。

这是django admin中用于注销的ccode:

def logout(request):
  """
 Removes the authenticated user's ID from the request and flushes their
 session data.
 """
 request.session.flush()
 if hasattr(request, 'user'):
     from django.contrib.auth.models import AnonymousUser
     request.user = AnonymousUser()

【问题讨论】:

【参考方案1】:

这取决于您使用的是哪种身份验证系统。如果您使用某种自己的 impl,您可以编写自己的 Middleware 类,将未经身份验证的用户重定向到登录页面。

如果您正在使用某些库,请查看其文档如何处理来自未经身份验证的用户对安全页面的请求。

【讨论】:

【参考方案2】:

退出并回击后,您可以访问管理页面的原因是,您看不到真实页面。相反,您会在浏览器缓存中看到它的副本

试试这个:

    转到任何管理页面 点击“退出” 点击浏览器中的“返回”按钮 按 F5 或点击浏览器中的“刷新”。

现在您将被重定向到管理后端的登录页面。

【讨论】:

我粘贴的代码是 django.contrib.auth.logout。它不是我自己的代码..我只使用 django admin。这个问题存在于django admin中。 哦,亲爱的...*现在*我明白你在问什么。我会重写我的答案。 我知道点击返回按钮后不会向服务器发送任何请求..但我仍然不希望用户像谷歌那样看到该页面 好的,我想这就是你需要的:***.com/questions/2510151/…【参考方案3】:

终于找到解决办法了:

from django.views.decorators.cache import cache_control

@cache_control(no_cache=True, must_revalidate=True)
def func()
  #some code
  return

这将强制浏览器向服务器发出请求。

【讨论】:

不适用于 Safari 13.0.3 (Mac OS X Catalina 10.15.1)【参考方案4】:

您可能会发现您需要在 chrome 中使用 @cache_control(no_cache=True, must_revalidate=True, no_store=True) 来完全停止查看任何后退按钮。

我在这里找到的 chrome 的关键是 no_store 1

【讨论】:

【参考方案5】:

+1 为 Digital Cake 的回答!这也解决了在 FireFox 上注销后备份到缓存页面的问题。我试过了:

@cache_control(no_cache=True, must_revalidate=True)

我的观点没有运气。每个数字蛋糕,尝试过:

@cache_control(no_cache=True, must_revalidate=True, no_store=True)

现在 Firefox 会备份到登录屏幕。

【讨论】:

@GeorgeK 它确实有效!尝试将装饰器也放在登录视图上。 不适用于 Safari 13.0.3 (Mac OS X Catalina 10.15.1)【参考方案6】:

我知道这是一个老问题,但接受的答案对我不起作用。我遇到了同样的问题(使用 django 1.8 和 Chrome)

最后,我从docs(django 1.7 或更高版本)中找到了解决方案。这肯定会奏效。

请看下面的代码

from django.contrib.auth.decorators import login_required

@login_required(login_url='/login/')
def myview(request):
    return HttpResponse(render(request,'path_to_your_view.html'))

@login_required 装饰器用于处理问题。您可以在文档中查看更多内容

【讨论】:

不适用于 Safari 13.0.3 (Mac OS X Catalina 10.15.1)【参考方案7】:

这是一个缓存问题。

您可以使用 cache_control 装饰器来强制视图上没有缓存:

from django.views.decorators.cache import cache_control

@cache_control(no_cache=True, must_revalidate=True, no_store=True)
def func()
  # some code
  return

这将强制浏览器向服务器发出请求。

更多关于cache_control

【讨论】:

以上是关于注销后禁用浏览器“返回”按钮?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止用户“返回”但在 JSP 中注销后保留缓存?

注销后如何防止浏览器的后退按钮登录

注销后的 CodeIgniter 后退按钮

servlet会话,注销后,按下浏览器的后退按钮时,再次显示安全页面[重复]

通过在 L5 中点击浏览器上的后退按钮来防止注销后再次登录?

如果会话无效,请禁用浏览器后退按钮 [重复]