2011-08-08 43 views
10

安全性在這裏不是問題。如何檢查Django用戶是否仍然僅從客戶端登錄?

我需要在頁面上顯示'您登錄爲用戶名',但不希望從緩存中刪除視圖,因此我希望能夠在javascript中執行此操作。

我不想在這個過程中做出任何關鍵的事情,只是檢查cookie是否仍然有效,如果是,則顯示歡迎消息,然後顯示登錄鏈接。

整點是不打數據庫和備用服務器,因爲我們拿到的這款單臺機器上,每天120000個用戶,所以我需要:

  • django.contrib.auth cookie的名稱,以便我能讀它;
  • 我應該從中讀取數據來決定用戶仍然登錄
  • 的方式從中提取

的用戶名如果​​我不能找到一個方法來做到這一點的數據,我將回退創建一個認證後端,在登錄時設置一個額外的cookie並在註銷時刪除它。

回答

10

sessionid cookie存在並且具有到期日期。你可以檢查,看看是否仍然有效,這表明他們記錄了它。你不能以這種方式獲得用戶名,但你必須添加一個自定義的cookie。

+0

這就是我的想法。 +1確認。如果您給我cookie的名稱,請接受答案。 –

+0

「sessionid」是Django會話cookie的默認名稱 – seriyPS

+0

正如seriyPS所說,我已經:-) –

2

在你的模板中有如下代碼。

{% block top %}<script async="async" defer="defer" type="text/javascript" src="{% static 'users/js/geo.js' %}" 

{% if user.is_authenticated %} data-authenticated="true" {% endif %} 

></script 
>{% endblock %} 

,並檢查你有喜歡的代碼驗證:

unsafe_authenticated = 'true' === document.currentScript.dataset.authenticated; 
+0

靜態標籤沒有被Django識別,但是一旦我使用裸露的URL,它就沒有問題。謝謝你。 – jfunk