注销后禁用浏览器“返回”按钮?
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
【讨论】:
以上是关于注销后禁用浏览器“返回”按钮?的主要内容,如果未能解决你的问题,请参考以下文章
servlet会话,注销后,按下浏览器的后退按钮时,再次显示安全页面[重复]