2016-05-06 19 views
5

Sto imparando il pallone e voglio capire come funzionano le sessioni. Apparentemente il server memorizza un cookie firmato sul browser client. Ho fatto questo processo utilizzandoSessioni di flaconi, dove sono memorizzati i cookie?

sessions['mycookie'] = 'mycookievalue' 

Ma sono in grado di trovare il cookie sul browser. Io di solito elencare i cookie sul browser Chrome utilizzando strumenti di sviluppo e l'esecuzione del comando:

document.cookie 

Questo funziona quando ho creato un cookie, ma nulla si apre quando ho impostato attraverso sessioni.

+0

Flask memorizza un ID di sessione nel browser con il tasto 'session' –

+1

@HassanMehmood: i negozi implementazione di default * tutte le sessioni dati * in un cookie (firmato). –

risposta

7

Il cookie di sessione Flask ha il set httponly flag, che lo rende invisibile da JavaScript.

È in ogni caso un normale cookie regolare, quindi è ancora memorizzato nel cookie store del browser; dovresti comunque essere in grado di vederlo negli strumenti di sviluppo del tuo browser.

È possibile impostare l'opzione SESSION_COOKIE_HTTPONLY su False se si desidera poter accedere al valore del cookie dal codice JavaScript. Dal Builtin Configuration Values section:

SESSION_COOKIE_HTTPONLY
controlli se il cookie deve essere impostato con il flag HttpOnly. Il valore predefinito è True.

Il cookie contiene tutti i dati della sessione, serializzati mediante JSON (con codifica il supporto per una più ampia gamma di tipi di Python), insieme ad una firma crittografata che consente di verificare i dati non possono essere manomessi in modo sicuro.

Se si disattiva la protezione httponly, qualsiasi codice JS potrebbe ancora decodificare e leggere tutti i dati della sessione. Anche se non può modificare quei valori, potrebbe comunque essere molto interessante il codice dannoso. Immagina che un bug XSS nel tuo sito sia peggiorato perché il codice JS potrebbe solo leggere un token CSRF utilizzato per proteggere un modulo Web direttamente dalla sessione.

+0

Martijn, grazie per la tua risposta. Sì, questo ha senso. Sono stato in grado di vedere il cookie dopo aver eseguito le impostazioni di Chrome. –

+0

@Martijn È l'unica differenza tra il cookie creato dalla sessione Flask vs il cookie "regolare" che è possibile assegnare a un oggetto risposta in Flask solo i dati memorizzati in esso? È meglio usare il cookie di sessione o creare un cookie e aggiungerlo all'oggetto di risposta tramite response.set_cookie (chiave/valore)? http://flask.pocoo.org/docs/0.11/quickstart/# cookies – AdjunctProfessorFalcon

+1

@ Malvin9000 la differenza è che Flask ha risolto il problema di come serializzare le strutture dati per voi, oltre a curare l'integrità dei dati. Puoi fare tutto da solo e memorizzare direttamente in un cookie, ma perché avere un cane e abbaiare da solo? A meno che non sia necessario condividere il cookie con altri sistemi, mi attengo alla sessione. –

0

sessioni sono intese solo per uso server. Questo è il motivo per cui è nascosto e crittografato per il cliente. Se si desidera impostare un cookie che può essere utilizzato dal client/browser. Puoi semplicemente impostare un cookie normale invece di un cookie sicuro (come la sessione).

È possibile impostare i cookie modificando la risposta.

def home_page(): 
    resp = make_response(...) 
    resp.set_cookie('my_cookie', 'cookie_value') 
    return resp 

document.cookie sul browser vi darà mycookie = cookie_value

Problemi correlati