对于我正在努力的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
,但这些似乎都没有影响我的应用的一般行为
关于什么可能
的任何想法答案 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会话数据发生了变化。