2011-03-29 108 views
0

基於文檔(http://docs.djangoproject.com/en/1.1/topics/http/sessions/)(是 - 1.1)Django爲所有用戶創建獨特的會話。記錄的用戶包含_auth_user_id。我怎樣才能在登錄取得這樣的檢查:django每個用戶一個會話

If new_login._auth_user_id in database: 
    delete(sessions_containing_same_id_except_new_one) 

的主要想法是讓每個用戶只有一個會話,並刪除舊 會議。

更新:現在的想法是在記錄時保存sessionid,如果sessionid更改,則在更換前刪除舊條目。 ATM缺少的部分是獲取該會話ID。

更新:我得到了會議ID爲request.session.session_key。問題是在登錄後會話創建了。如果您在創建密鑰之前請求密鑰 - 它將創建新密鑰而不是發出任何警告。

+0

類似質疑[here](http://stackoverflow.com/questions/3379353/django-auth-how-to-disallow-user-session-if-his-ip-doesnt-match-the-original-on) – 2011-03-29 12:12:44

+1

@StephenPaulger,其基於IP。從單一辦公室來看,所有電腦都具有相同的IP。因此,我正在搜索有關會話的信息。我幾乎知道該怎麼做,但我無法獲得session_key,因爲'request.session.session_key'創建新密鑰而不是採用current。 – JackLeo 2011-03-29 12:20:07

+1

這是來自[這個問題](http://stackoverflow.com/questions/1814437/allow-only-one-concurrent-login-per-user-in-django-app)第二個答案可能是你正在尋找。 – 2011-03-29 12:24:48

回答

4

我創建額外的字段用戶(userattributes擴展用戶):

class UserAttributes(User): 
    last_session_key = models.CharField(blank=True, null=True, max_length=40) 

和方法:

def set_session_key(self, key): 
    if self.last_session_key and not self.last_session_key == key: 
     Session.objects.get(session_key=self.last_session_key).delete() 
    self.last_session_key = key 
    self.save() 

,我只是登錄後把它稱爲:

auth.login(request, user) 
user.userattributes.set_session_key(request.session.session_key) 
+1

不要忘記導入會話 '從django.contrib.sessions.models導入會話' – 2012-10-17 17:03:20

+0

最簡單的答案我發現...一個警告... Session.objects.get(session_key = self.last_session_key)result should be checked在刪除()之前 – 2015-12-22 20:15:20