2013-03-21 13 views
8

Sto utilizzando le ultime sessioni lato client Flask/Werkzeug (Flask 0.9) per mantenere le informazioni tra le richieste. La sessione non è impostata per essere persistente (come sto bene con il cookie che viene eliminato quando il browser è chiuso).La sessione Flask dimentica l'immissione tra le richieste

Il mio problema è il seguente:

Faccio uso di alcune codice lato server per riempire la variabile di sessione Flask con una voce. Dopo questo, la variabile di sessione simile a questa:

<SecureCookieSession {u'items': SOMENOTVERYIMPORTANTDICTIONARY}, '_fresh': True, 'user_id': u'1', 'csrf': '0aef1995cdf2cxx0233fdf3321d17fc7267f3b32', '_id': 'someUNIQUEcode'}*> 

ho utilizzare queste informazioni per il rendering di una pagina che esegue una richiesta GET (tramite JQuery) per la stessa applicazione Flask, ma improvvisamente il dizionario contenente le 'voci' ingresso nella sessione è andata:

<SecureCookieSession {'_fresh': True, 'user_id': u'1', 'csrf': '0aef1995cdf2cxx0233fdf3321d17fc7267f3b32', '_id': 'someUNIQUEcode'}> 

ho fatto qualche ricerca in giro, e ho pensato che potrebbe essere legato al fatto che sto testando su localhost (127.0.0.1 non è lo stesso di localhost). Ho corretto il mio file hosts e aggiunto una voce "dev.localhost" per assicurarmi che tutte le richieste provenissero dallo stesso host.

Inoltre, il riquadro di sviluppo del browser (Chrome) mostra esattamente gli stessi identificativi per i cookie di sessione inviati al server.

Inoltre, l'impostazione session.modified = True non è di aiuto.

L'unica cosa che cambia tra le richieste è

__utmb=122666782.18.10.1363877633 

per la prima richiesta (quella che popola l'entrata items) contro la seconda richiesta

__utmb=122666782.19.10.1363877633 

Pensando che può essere ancora una cosa correlata ad Ajax. Ho testato il contenuto della variabile di sessione dopo una semplice pagina di ricarica: la voce items è ancora passata dalla sessione.

Qualsiasi aiuto sarebbe molto apprezzato.

+0

Può essere questo può aiutare http://stackoverflow.com/questions/13760008/why-do-some-flask-session-values-disappear-from-the-session-after-close-the-br – codegeek

+0

è solo la voce 'items' rimossa o è qualcosa che hai impostato sulla sessione? –

+0

@codegeek Ho dato un'occhiata a quella voce prima di postare la mia domanda, e ho ipotizzato che potrebbe trattarsi di un problema di cookie tra host. Ho impostato il mio hostname su 'localhost.dev' per evitare confusione tra' localhost' e '127.0.0.1'. Inoltre, ho provato a impostare esplicitamente il dominio cookie e server nella configurazione di Flask, ma non è stato di alcun aiuto. – RJH

risposta

10

Si scopre che il cookie inviato al client (Chrome) supera il limite di 4096 byte per le dimensioni dei cookie. Apparentemente Django utilizza le sessioni lato server per impostazione predefinita, il che ha fatto apparire questo problema solo quando ho spostato il mio codice su Flask. L'utilizzo delle sessioni lato server in Flask come in flask-kvsession e altri dovrebbe risolvere il problema.

+1

... se solo mi fossi imbattuto in [questa prima domanda] (http://stackoverflow.com/questions/7100315/flask-session-member-not-persisting-across-requests?rq=1) prima. – RJH

+1

... è incredibile che non riceviamo alcun avviso in fase di esecuzione. Sembra che la dichiarazione sia semplicemente ignorata. Sono sicuro che segnalarlo in qualche modo avrebbe risparmiato ore e ore di attività di ricerca dei bug. :) – filannim

Problemi correlati