我有一个应用程序,其后端是使用 django 和 python 编写的。我想在我的应用程序中实现自动注销功能。为此,我使用了以下 django 内置功能:
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
SESSION_COOKIE_AGE = 40
SESSION_SAVE_EVERY_REQUEST = True
我还使用
LOGOUT_REDIRECT_URL
在注销后重定向页面。
但这并没有帮助。
40 秒后,会发生注销,但在前端不可见,只有当用户刷新选项卡或在选项卡中发出任何请求时才会出现登录页面。
如果我关闭浏览器并再次打开它,主页将显示为没有数据,因为数据是用户特定的。如果选项卡刷新完成,选项卡将重定向到登录页面。
我想实现2个场景:
如果发生自动登录,用户应自动重定向到登录页面。
如果用户关闭浏览器窗口并再次打开它,则应向用户显示应用程序的登录页面。
关于如何实现这些场景有什么建议吗?
如有任何帮助,我们将不胜感激。 谢谢你。
- 40 秒后,发生注销,但在前端不可见,仅当用户刷新选项卡或在选项卡中发出任何请求时才会出现登录页面。
是的,就是这样。您的浏览器不会自动执行任何操作。您必须编写必要的 Javascript 代码来监视会话 cookie 的寿命。当它过期时,您的 Javascript 代码将加载登录页面。
- 如果我关闭浏览器并再次打开它,主页将显示没有数据,因为数据是用户特定的。如果选项卡刷新完成,选项卡将重定向到登录页面。
这听起来不对。如果您重新打开浏览器并访问应用程序的主页,它应该会带您进入登录页面。但是您是否尝试在重新打开浏览器后恢复其会话(
Ctrl + Shift + T
)?
自动注销。
在settings.py文件中添加以下两个值:
1.
SESSION_COOKIE_AGE = TIME #//change expired session
Example: SESSION_COOKIE_AGE = 240*60 #//four hours or your time
SESSION_SAVE_EVERY_REQUEST = True
################################################## ###########
然后在你的base.html文件中添加以下jquery代码:
function autorefresh() {
// auto refresh page after 1 second
setInterval('refreshPage()', 6*1000);
}
function refreshPage() {
$.ajax({
url: window.location.pathname,
success: function(data) {
window.location = "."
// $('#console').html(data);
}
});
}
</script>
<script>autorefresh()</script>
<div id="console" ></div>
在 static/js 文件夹和 base.html 文件中添加 session.js 文件:
var time = new Date().getTime();
$(document).on("mousemove keypress scroll touchstart", function(e) {
time = new Date().getTime();
});
function refresh() {
if(new Date().getTime() - time >= 300000) //300000 = 5 minutes
window.location.reload(true);
else
setTimeout(refresh, 10000);
}
setTimeout(refresh, 10000);
if (window.history.replaceState) {
window.history.replaceState(null, null, window.location.href);
}