Django会话身份验证和禁用的cookie

时间:2013-12-20 15:03:50

标签: django cookies django-authentication sessionid

django中的会话身份验证是否与cookie有关?如果用户的浏览器禁用了cookie,它会起作用吗? django应该警告用户他们的浏览器是否禁用了cookie?

2 个答案:

答案 0 :(得分:2)

不,身份验证是基于cookie的 - 会话ID 存储在Cookie中!

  

Django会话框架完全且完全基于cookie。   它不会回退到将URL中的会话ID作为最后的手段,   就像PHP一样。这是一个有意的设计决定。不仅如此   这种行为会使网址变得丑陋,这会使您的网站容易受到攻击   通过“Referer”标题进行会话ID盗窃。

有解决方法,例如您可以将会话ID放在查询字符串中。查看此文章:http://www.stereoplex.com/blog/cookieless-django-sessions-and-authentication-with

作者警告:除非您了解潜在的安全后果,否则不要执行我要描述的内容

request.GET获取会话ID并将其放入request.COOKIES的中间件(FakeSessionCookie中间件必须放在settings.py中的SessionMiddleware之前):

from django.conf import settings

class FakeSessionCookieMiddleware(object):

    def process_request(self, request):
        if not request.COOKIES.has_key(settings.SESSION_COOKIE_NAME) \
            and request.GET.has_key(settings.SESSION_COOKIE_NAME):
            request.COOKIES[settings.SESSION_COOKIE_NAME] = \
                request.GET[settings.SESSION_COOKIE_NAME]

在身份验证之后,您应该在所有对服务器的请求中包含会话ID作为url(GET)参数。

答案 1 :(得分:0)

根据文件:

  

Django为匿名会话提供全面支持。会话框架允许您基于每个站点访问者存储和检索任意数据。它在服务器端存储数据并抽象cookie的发送和接收。 Cookie包含会话ID - 而不是数据本身......   more here

django使用基于cookie的会话,因此没有cookie身份验证将无效。