与sessionid的Django(Python)问题

wen*_*ert 5 python django

我遇到了sessionid的问题:request.session.session_key每个页面刷新/表单提交生成一个键.

虽然这个:request.COOKIES[settings.SESSION_COOKIE_NAME]抱怨找不到'sessionid'键.

我错过了什么吗?我需要一个在我网站上的页面请求中持久存在的"密钥".即使浏览器关闭/ 3周等我也需要它才能坚持下去.我怎么做这个是Django?

我需要配置什么吗?如果我误解了有关sessionid及其生成方式的内容,请纠正我.

谢谢你的回复.

问候,W

我的settings.py是:http://pastebin.com/G9qnD9En

Ian*_*and 9

听起来您的浏览器不接受Django发送的会话cookie.

您的浏览器应该能够通过应用程序的页面响应告诉您正在设置的cookie.检查是否确实发送了'sessionid'cookie,并且域和路径是正确的.

如果您在settings.py文件中有错误SESSION_COOKIE_DOMAINSESSION_COOKIE_PATH设置错误,则可能导致Django在浏览器中设置未返回服务器的cookie.

如果您想验证整个设置,请首先阅读:http://docs.djangoproject.com/en/1.2/topics/http/sessions/

简而言之,您需要:

  • 'django.contrib.sessions'INSTALLED_APPS;
  • 'django.contrib.sessions.middleware.SessionMiddleware'MIDDLEWARE_CLASSES; 和
  • 在生产服务器上,您可能需要设置SESSION_COOKIE_DOMAINSESSION_COOKIE_PATH与同一域或相关域上的其他Web应用程序进行良好的交互.

编辑:

查看了粘贴的设置后,我发现有两种不同的事情发生,每种情况都足以阻止会话cookie的运行.

  1. SESSION_COOKIE_DOMAIN 设置为"mydomain.com"

    通用顶级域名(TLD)的cookie 要求 "域"部分包含至少两个句点(".")分隔符.这会阻止人们为".com"这样的域设置cookie.(我认为,国家级管辖范围内的域名Cookie需要三个时段.)

    将其更改为".mydomain.com",它应该由浏览器返回.

    在开发中(在本地计算机上运行,​​在127.0.0.1),将此设置保留为空白,或者您的浏览器根本不接受cookie.

  2. SESSION_COOKIE_PATH 设置为"/ tmp"

    这看起来像是一个错误,除非您的Web应用程序托管在" http://mydomain.com/tmp/ "

    SESSION_COOKIE_PATH用于指示cookie的"路径"组件,即将cookie返回到服务器的URL前缀.这使您可以在"mydomain.com/firstapp/"上托管一个应用程序,在"mydomain.com/secondapp/"上托管另一个应用程序,并且可以确保"sessionid"cookie不会在它们之间混淆.

    如果您只有一个在此域名下托管的应用程序,则将其留空,它将默认为"/"(整个域)

    要控制Django在您的文件系统上存储会话数据的位置(这是您尝试做的事情),您可以使用该SESSION_FILE_PATH设置.默认情况下,无论如何都设置为"/ tmp /",因此您根本不需要设置它.


Chr*_*048 5

我遇到了类似的问题,我通过将 SESSION_COOKIE_NAME 设置为默认“sessionid”以外的其他内容来修复它。我认为谷歌分析可能以某种方式破坏了 cookie。