Django 自动注销和页面重定向

Posted

技术标签:

【中文标题】Django 自动注销和页面重定向【英文标题】:Django auto logout and page redirection 【发布时间】:2019-02-28 23:17:54 【问题描述】:

我有一个应用程序,其后端是使用 django 和 python 编写的。我想在我的应用程序中实现自动注销功能。为此,我使用了以下 django 内置功能:

SESSION_EXPIRE_AT_BROWSER_CLOSE = True
SESSION_COOKIE_AGE = 40
SESSION_SAVE_EVERY_REQUEST = True

我也使用LOGOUT_REDIRECT_URL在注销后重定向页面。

但这无济于事。

    40 秒后注销,但在前端不可见,仅当用户刷新选项卡或在选项卡中发出任何请求时才会出现登录页面。

    如果我关闭浏览器并再次打开它,主页会显示没有数据,因为数据是用户特定的。如果 tab 的 refresh 完成,则 tab 被重定向到登录页面。

我想实现2个场景:

    如果发生自动登录,用户应自动重定向到登录页面。

    如果用户关闭浏览器窗口并再次打开它,则应向用户显示应用程序的登录页面。

关于如何实现这些场景有什么建议吗?

任何帮助将不胜感激。 谢谢。

【问题讨论】:

【参考方案1】:
    40 秒后注销,但在前端不可见,只有当用户刷新选项卡或在选项卡中发出任何请求时才会出现登录页面。

是的,它就是这样工作的。您的浏览器不会自动执行任何操作。您必须编写必要的 javascript 代码来监控会话 cookie 的年龄。当它过期时,您的 Javascript 代码将加载登录页面。

    如果我关闭浏览器并再次打开它,主页会显示没有数据,因为数据是用户特定的。如果刷新完成选项卡完成,则选项卡将重定向到登录页面。

这听起来不对。如果您重新打开浏览器并访问您的应用主页,它应该会带您进入登录页面。但是您是否尝试在重新打开浏览器后恢复会话 (Ctrl + Shift + T)?

【讨论】:

对于第二点,我已经将chrome的设置更改为从我离开的地方继续。但是我看到银行网站已经实施的是,即使使用此设置,它们也会在下次打开浏览器时重定向到不同的页面。我必须实现的东西。【参考方案2】:

自动注销。

在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>

【讨论】:

以上是关于Django 自动注销和页面重定向的主要内容,如果未能解决你的问题,请参考以下文章

在 YII2 中使用自动注销,需要在再次登录后将用户重定向到用户在自动注销之前的相同 URL

IdentityServer3 注销端点上没有自动重定向

python Django简单注销和重定向。

打开多个选项卡的自动注销

如何配置在Django中注销后重定向到哪里?

如何配置在Django中注销后重定向到哪里?