2016-05-24 107 views
1

我有一個奇怪的問題,我正在努力與Django會議。基本上我的會話創建正確,但出於某種原因,我無法檢索後會話數據的內容。Python/Django和會話問題

下面是基本的一步一步的指導

第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的

值:由於種種原因,userSecureId的價值ResponseRedirect過程中丟失。這時我的web應用程序檢測我的cookie,並能夠檢索會話密鑰,但userSecureId回報「無」

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

只是爲了確認我的會議是在Django的側面配置正確,如果我解碼session_data是的django_session其中session_key ='co5nknkz7kmka82f5130098gxoyvxkf8',然後我能夠正確檢索值(意味着userSecureId存在)

另一個問題是此代碼在我的本地系統上完美工作。所以我只是想知道我是否錯過了一些東西。我正在使用遠程數據庫來存儲會話信息,並且我已經確認我的遠程系統可以聯繫數據庫。

我試圖改變我的settings.py(例如:添加SESSION_COOKIE_SECURE,SESSION_COOKIE_DOMAIN,SESSION_COOKIE_HTTPONLY,SESSION_SAVE_EVERY_REQUEST但他們都不似乎影響我的應用程序的一般行爲

上什麼可能是

回答

0

不要把任何想法,「安全令牌「放入URL路徑中,URLs a存放在瀏覽器歷史記錄等許多地方,它們是public,而不是」secure「

Django會爲你創建一個會話ID,如果你切換會話cookie至http_only(使用SESSION_COOKIE_HTTPONLY=True在設置中)並使用自動創建的csrf_token,那麼它已經安全。

根本就

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

然後在該頁面的查看功能,檢查用戶身份驗證(也應該是一個@decorator)。

關於您的問題,您正確使用session

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

在使用用戶的會話cookie值自動訪問的會話上創建一個key:value對。

如果不保存修改後的會話值,你可以嘗試設置

request.session.modified = True 

告訴Django的會話數據改變。

+0

感謝您的建議。然而,這並不能解釋爲什麼當我遠程託管我的django應用程序時,我無法在ResponseRedirect之後檢索會話的值(如果我重定向到/ portal/或只是/ portal)。 – PERPO

+0

我是否正確理解會話值被寫入會話存儲數據庫? – C14L

+0

你是對的。會話值存儲在我的數據庫中。這些數據包括一些用戶ID信息,電子郵件和我的服務所需的其他各種信息。我們的想法是,只要有可能將用戶指向某個特定的url(檢查userSecurId是否存在以確認用戶被批准使用該應用),就可以檢索此值。 – PERPO