2013-05-04 18 views
12

Per qualche motivo, fare {{ request.session.session_key }} nel modello mi dà un valore None. Dopo qualche ricerca, mi sono imbattuto this post che menzionato utilizzando request.session._session_id ma usando che nel modello mi dà un errore:Django 1.5 Session Key è None

Variables and attributes may not begin with underscores: 'request.session._session_key'

La mia comprensione di sessioni in Django è che il momento in cui un utente carica una pagina (qualsiasi pagina), anche se è anonimo, un session_id viene assegnato a quella particolare sessione. La mia comprensione è errata e inoltre, è questo il punto in cui si suppone che using[SESSION_SAVE_EVERY_REQUEST] entri?

Utilizzo il back-end del database come archivio delle sessioni.

risposta

30

Per rispondere alla mia domanda:

E 'ancora possibile accedere alla chiave di sessione utilizzando {{ request.session.session_key }}. Tuttavia, lo docs menziona che una sessione verrà creata solo se hai salvato/modificato la sessione.

By default, Django only saves to the session database when the session has been modified – that is if any of its dictionary values have been assigned or deleted:

Quindi nel mio caso, la sessione non è stata impostata perché non la stavo manipolando. L'utilizzo di SESSION_SAVE_EVERY_REQUEST risolverà effettivamente il problema a livello globale. Nel mio caso d'uso, ne avevo solo bisogno su una particolare funzione di visualizzazione quindi era una semplice questione:

if not request.session.get('has_session'): 
    request.session['has_session'] = True 
+0

Bello piccolo bocconcino. –

Problemi correlati