代码之家  ›  专栏  ›  技术社区  ›  Emre Sevinç

为什么会话在浏览器关闭时不过期?

  •  22
  • Emre Sevinç  · 技术社区  · 14 年前

    根据Django文档,“如果会话在浏览器关闭时过期,则Django将使用浏览器长度的cookie,即用户关闭浏览器时过期的cookie。”如果希望用户每次打开浏览器时都必须登录,请使用此选项。“

    这就是我所做的,在settings.py文件中添加以下行(并重新启动服务器):

    # Close the session when user closes the browser
    SESSION_EXPIRE_AT_BROWSER_CLOSE = True
    

    然后我登录到一个检查用户是否经过身份验证的页面,然后关闭浏览器。当我再次打开浏览器并访问同一页面时,它不会要求用户名和密码,因为它显然通过了以下测试:

    def check_teacher(request):
        result = {}
        if request.user.is_authenticated():
            ...
    

    我做错了什么,或者我错过了什么?有什么建议吗?

    我正在我的Ubuntu GNU/Linux 10.10系统上使用django 1.3 pre-alpha SVN-13858,并使用django开发服务器运行上述示例。

    4 回复  |  直到 10 年前
        1
  •  20
  •   istruble kalyan    14 年前

    关闭选项卡或窗口不算作关闭浏览器。确保退出浏览器程序以结束浏览器会话。

    如果这不起作用,可以在firefox中使用firebug,或者在safari中使用web inspector,在初始页面点击时重新检查响应中的标题。初始页面命中可能是许多事情之一;当您第一次打开浏览器时,当您注销时,或者在清除cookies后立即。用 SESSION_EXPIRE_AT_BROWSER_CLOSE = True 您应该在标题中看到类似的内容:

    Set-Cookie:sessionid=f4c06139bc46a10e1a30d5f0ab7773e2; Path=/
    

    什么时候 SESSION_EXPIRE_AT_BROWSER_CLOSE = False expires=... 增值:

    Set-Cookie:sessionid=a532f3d7dc314afc58e8f676ed72280e; expires=Wed, 03-Nov-2010 17:08:45 GMT; Max-Age=1209600; Path=/
    

    如果你很难看到 Set-Cookie 由于重定向,您可以尝试使用 django-debug-toolbar 将重定向分成多个页面。

        2
  •  6
  •   Seth    11 年前

    @Isuble和@haasfsafas都是正确的。解决办法是

    1. 集合 SESSION_EXPIRE_AT_BROWSER_CLOSE = True
    2. 删除中的行 django_session 清除任何可能导致混淆的会话的表。( delete from django_session )
    3. 认识到 所有窗口和选项卡 必须关闭浏览器中的,会话才能过期。这是浏览器行为,不是Django行为。
        3
  •  1
  •   B Robster    12 年前

    除非运行 manage.py syncdb 再一次。

        4
  •  0
  •   Paco    10 年前

    必须清除数据库中的会话:

    delete FROM django_session