簡體   English   中英

Python / Django和會話問題

[英]Python/Django and sessions problems

對於我正在努力的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但它們似乎都不會影響我的應用的一般行為

什么可能的想法

不要將“安全令牌”放入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會話數據發生了變化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM