Python / Django和会话问题

时间:2016-05-24 17:11:23

标签: python django session cookies

对于我正在努力的Django会话,我有一个奇怪的问题。基本上我的会话是正确创建的,但由于某种原因我之后无法检索session_data的内容。

以下是基本的分步指南

第1步:我访问主页并且(正如预期的那样)我还没有有效的会话。

HOMEPAGE: SESSION VALUE session_key: None userSecureId: None END HOMEPAGE: SESSION VALUE

第2步:我登录,在Django上生成会话,然后将用户重定向到他的部分

以下是我的会话的生成方式以及如何重定向我的用户: context = RequestContext(request) request.session['userSecureId'] = verify_token['userSecureId'] request.session.set_expiry(3600) return HttpResponseRedirect('http://mywebsite/portal/'+verify_token['userSecureId'], context)

这是我在日志中找到的内容(我只是在执行HttpResponseRedirect之前打印出来):

AUTH PAGE: SESSION VALUE session_key: None userSecureId: 4d9f6a58-0ad4-4a4b-8191-bbfc8e397afe END AUTH PAGE: SESSION VALUE

截至目前,Django已经创建了我的会话,并且能够检索userSecureId的值

步骤3:由于某些原因,在ResponseRedirect期间,userSecureId的值将丢失。此时我的Web应用程序检测到我的cookie并且能够检索会话密钥,但userSecureId返回'None'

HOMEPAGE: SESSION VALUE session_key: co5nknkz7kmka82f5130098gxoyvxkf8 userSecureId: None END HOMEPAGE: SESSION VALUE

为了确认我的会话在Django端正确配置,如果我解码django_session的session_data,其中session_key ='co5nknkz7kmka82f5130098gxoyvxkf8',那么我就能正确检索该值(意味着存在userSecureId)

另一个问题是此代码在我的本地系统上运行良好。所以我只是想知道我是否遗漏了什么。我正在使用远程数据库来存储会话信息,我已经确认我的远程系统可以联系数据库。

我尝试更改我的settings.py(例如:添加SESSION_COOKIE_SECURE,SESSION_COOKIE_DOMAIN,SESSION_COOKIE_HTTPONLY,SESSION_SAVE_EVERY_REQUEST,但这些似乎都没有影响我的应用的一般行为

关于什么可能

的任何想法

1 个答案:

答案 0 :(得分:0)

不要放置"安全代币"进入URL路径。存储在浏览器历史记录和许多其他地方的URL。他们公开,而不是"安全"。

Django会为您创建一个会话ID,如果您将会话cookie切换到http_only(在设置中使用SESSION_COOKIE_HTTPONLY=True)并使用自动创建的csrf_token,那么它已经是安全

简单地做

HttpResponseRedirect('http://mywebsite/portal/')

然后在该页面的视图功能中,检查用户是否经过身份验证(有一个@decorator)。

关于您的问题,您正确使用session

request.session['mykey'] = 'My Value'

在会话上创建一个键:值对,使用用户的会话cookie值自动访问。

如果未保存修改后的会话值,您可以尝试设置

request.session.modified = True

告诉Django会话数据发生了变化。