django中的会话身份验证是否与cookie有关?如果用户的浏览器禁用了cookie,它会起作用吗? django应该警告用户他们的浏览器是否禁用了cookie?
答案 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身份验证将无效。