【问题标题】:Why can't I get 'sessionid' on the client side?为什么我不能在客户端获得“sessionid”?
【发布时间】:2012-09-08 07:51:05
【问题描述】:

我登录到 django 管理员。当我打开 firebug JS 控制台并尝试使用 document.cookie 打印 cookie 时,我只得到 csrftoken cookie。但是当我打开 Firefox 首选项 > 隐私 > 删除 cookie... 时,我可以看到 sessionid cookie。

如何在客户端获得它?

【问题讨论】:

    标签: javascript django session cookies client-side-scripting


    【解决方案1】:

    您无法访问会话 cookie,因为它默认设置为 HTTPOnly。(您可以使用 Firebug(Resources->Cookies->sessionid 的 HTTP 列已选中)查看它)

    从docs复制:

    SESSION_COOKIE_HTTPONLY
    Default: True
    
    Whether to use HTTPOnly flag on the session cookie. 
    If this is set to True, client-side JavaScript will not to 
    be able to access the session cookie.
    

    如果你真的想从客户端代码访问它,你可以在你的 settings.py 中设置:SESSION_COOKIE_HTTPONLY = False。不过,这不是推荐的做法。

    【讨论】:

    • 请注意,不推荐这样做的原因是,如果您的网站在某种程度上容易受到 XSS 的影响,那么攻击者可以使用它来窃取会话 ID。如果会话 ID 不暴露给 JS 领域,这当然是不可能的。
    • 文档中的另一条注释:“也没有太多的理由可以忽略这一点:如果您的代码依赖于从 JavaScript 读取会话 cookie,那么您可能做错了。”
    猜你喜欢
    • 2013-11-19
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多