2012-06-20 13 views
5

Ho creato un'applicazione in CakePHP che consente a un utente di accedere e fare alcune cose, mantiene l'utente connesso per circa 24 ore, penso per impostazione predefinita. E questo viene gestito da una sessione/cookie come anche un cookie viene creato ...Come mi ricordo differire dal timeout della sessione

1.) Quindi cosa mi ricorderebbe portare alla festa? Come tutto ciò che farebbe è creare un ALTRO cookie che imposta un timeout e mantiene l'utente loggato ... Ma questa funzionalità esiste in ogni singola app di default con la sessione giusta? Ma ho visto molti siti fare questo, ma non capisco perché la sessione sta facendo questo fuori dalla scatola:/

2.) Come anche le sessioni scadono anche se un utente continua a utilizzare un sito Web ? per esempio. se l'ho impostato per essere 1 minuto ma aggiornato ogni 30 secondi, scadrà ancora ... ma ho mantenuto attivo il sito prima che potesse scadere, quindi come poteva ancora scadere? Questo è fastidioso perché ho una scadenza per un'app di 1 ora, ma anche quando il client utilizza il sito scade dopo 1 ora indipendentemente dall'attività.

Sarebbe bello se qualcuno potesse rispondere a queste 2 domande.

AGGIORNAMENTO: Ho creato una taglia su questo nella speranza di ottenere un esperto di CakePHP per aiutare a risolvere questo problema. Il problema è che le Sessioni scadono dopo il timeout Indipendentemente dall'interazione dell'utente. Quello che voglio fare è dire che ho una sessione della durata di 5 minuti e che l'utente fa un postback ogni 30 secondi, quindi quella sessione sarà ancora in giro dopo i 5 minuti. Questo non è il caso in questo momento ...

Configure::write('Session', array(
     'start' => true, 
     'defaults' => 'php', 
     'timeout' => 1, 
     'cookieTimeout' => 1, 
     'autoRegenerate' => true 
    )); 
+1

Puoi includere la configurazione di sessione? Ci sono un sacco di cose che potrebbero accadere qui, e questo è un buon punto di partenza. –

+0

Aggiunta la configurazione e impostato il tempo per essere molto basso in modo da poter testare la teoria! – Cameron

+0

Una volta compresa la differenza, nota che Zend Framework usa il cookie di sessione per implementare la funzione ricordami - apparentemente hanno bisogno di sintonizzarsi su thread come questo! – quickshiftin

risposta

8
  1. cosa che avrebbe portato è che se l'utente chiude il suo browser e riavvia, sarebbe comunque il login automatico. Questo non è il caso di un cookie di sessione, poiché tale cookie viene eliminato non appena il browser viene chiuso.

  2. Forse la pagina visitata ogni 30 secondi non ha avviato la sessione. In tal caso, il meccanismo di sessione non viene utilizzato e la data di scadenza della sessione non viene reimpostata su now + 1 minute. O forse l'aggiornamento colpisce solo la cache del browser e non il server.

+0

1.) Quando si dice chiudere il browser, cosa si intende in realtà esce dall'applicazione, come quando chiudo la finestra e poi rivisitare il sito che sto ancora collegato. 2.) Come posso risolvere questo problema? Sto usando CakePHP e fintanto che l'utente sta utilizzando il sito, ad es. caricamento di una pagina ecc. la sessione non dovrebbe scadere se non inattiva per quella 1 ora. – Cameron

+0

1) No, intendo "chiudi il browser", ovvero chiudi tutte le finestre del browser. 2) assicurati di chiamare session_start() su ogni pagina dell'applicazione, anche se la sessione non è utilizzata da quella pagina. –

+0

Che dire del mondo CakePHP? Avevo l'impressione che esistano sessioni in tutta l'app? – Cameron

0

1.) La differenza tra un cookie di sessione e "ricordati di me" è che un cookie di sessione ha una data di scadenza di "0". Il che significa "scadenza alla chiusura del browser". Mentre "ricordami" dà una data di scadenza specifica, diciamo un mese da adesso, allo stesso cookie di sessione. Questa è l'unica differenza. Potresti pensare che questa differenza di funzionalità sia banale o priva di significato, ma considera questo: a casa non voglio preoccuparmi di accedere ogni sera allo stesso dannato Yahoo! conto, mentre al lavoro non voglio disturbarmi cancellando i miei biscotti ogni volta che devo andare a fare pipì.

2.) I cookie di sessione non devono scadere anche quando l'applicazione è in uso. Dove e in quali circostanze stai vedendo questo comportamento? È sbagliato.

+0

Sto osservando questo comportamento ovunque nell'app. La sessione scade dopo il timeout anche se sto navigando tra le pagine ecc. – Cameron

1

Comprendere la combinazione delle impostazioni di sicurezza in combinazione con i timeout, questa è una parte molto importante. Quando la sicurezza è impostata su un livello elevato, le sessioni potrebbero essere uccise prima di quanto previsto.

Accanto a quel test con il negozio di torta interna. In questo modo la configurazione del sistema locale non può influenzarlo. Potrebbe essere che le impostazioni di PHP prevalgano sulle impostazioni di Cake. Quindi imposta il session store su Cake. Ciò creerà una directory con sessioni che puoi controllare.

Allo stesso modo si tratta di una combinazione di impostazioni del server e in attesa della configurazione di torta non ignorare queste impostazioni del server.

8

OK, vediamo se riesco a prendere un po 'di quella di taglie (bottino?), Ma anche di testare le mie capacità esplicative :)

Quindi partiamo dal numero 1.

Quindi cosa mi ricorderebbe portare alla festa?

Ciò che è importante distinguere qui è la differenza tra un "cookie di sessione" e un "ricordami cookie".

Dal HTTP è un stateless protocol, un cookie di sessione viene utilizzato per legare diverse richieste di un singolo utente. Senza di esso, ogni singola richiesta al tuo server web è completamente estranea a qualsiasi altra richiesta. Riesci a immaginare di scrivere applicazioni senza sessioni? Ogni richiesta è completamente vuota, nessun login, nessuna variabile di sessione ... ogni richiesta è un utente sconosciuto! Ciò significa fondamentalmente senza applicazioni Web!

Ora, la cosa importante qui è rendersi conto che si assolutamente non voglio la tua sessione per durare 24 ore! Nel mio libro, questo è un no-no molto grande. Più è breve la sessione, più sicura è (almeno in teoria). Perché? Perché un session can be hijacked! Più lunga è la sessione, maggiori sono le possibilità di essere dirottata.

Ad esempio, immaginare un'applicazione bancaria. Inoltre, immagina che il tuo utente stia accedendo su un PC pubblico (il nostro utente non è il più brillante). Quindi sta gestendo il suo account o qualsiasi altra cosa ... e il suo telefono squilla. Essendo un idiota, prende la chiamata e se ne va, senza uscire. Vuoi che la tua sessione scada tra 5 minuti, 15 minuti o 24 ore? Non so voi, ma per qualcosa di così importante come l'online banking, voglio che la sessione sia andata al più presto.

Passare alla parte "ricordami".

Così cookie di sessione "collega" di più richieste in una singola sessione, che cosa fa il "ricordati di me" cookie fare? In termini semplici: lega più sessioni a un singolo utente.

volete che il vostro sito sia facile e piacevole da usare, e il login è quasi mai piacevole. È solo una cosa fastidiosa che devi fare ogni volta prima di fare quella cosa che vuoi veramente fare. Un ricordati che il cookie rimuove quel fastidio.

Effettuare il login una volta, selezionare la casella, e ora si è sempre connessi su quel PC. Questo è il motivo per cui dovresti mai usare la funzione "ricordami" mentre si è su un PC condiviso, perché la persona successiva avrà la tua identità. Legittimamente. Questo è il motivo per cui ricorda che i cookie sono anche un rischio per la sicurezza, possono essere dirottati in modo molto simile al cookie di sessione.

Infine, v'è una differenza fondamentale tra un cookie di sessione e mi ricordo di cookie: expiration. I cookie di sessione scadono di norma quando si chiude il browser (o dopo un periodo specificato esplicitamente), mentre i cookie di solito non durano più a lungo.

Anche come scadono le sessioni anche se un utente continua a utilizzare un sito Web ?

Per farla semplice, non lo fanno. È necessario aver cambiato il modo in cui la torta (o la tua applicazione) gestisce le sessioni. La risposta deve essere da qualche parte nel codice. Il motivo per cui non hai ottenuto una risposta soddisfacente qui è perché non possiamo vedere il tuo codice. Dovrai solo eseguire il debug e tenere traccia di ciò che accade ai tuoi cookie. JB Nizet ti ha dato alcuni suggerimenti.

Una cosa che so che può causare problemi su alcuni server è il livello di sicurezza della torta. Provare a ridurre nel vostro /Config/core.php:

Configure::write('Security.level', 'medium'); // or 'low' 

Se questo non aiuta, allora la risposta è sicuramente nel codice. Spero che questa risposta ti spinga nella giusta direzione!

0

Se faccio questo:

Configure::write('Session', array(
     'start' => true, 
     'defaults' => 'cake', 
     'timeout' => 1, 
     'cookieTimeout' => 1, 
     'autoRegenerate' => true 
    )); 

/** 
* The level of CakePHP security. 
*/ 
    Configure::write('Security.level', 'high'); 

Esso consente di risolvere il problema! Quindi la sessione dura 10 secondi, ma se aggiorno ogni 2-3 secondi, dopo 10 secondi di accesso continuerò ad accedere mentre il cookie viene aggiornato. Quindi sembra che le impostazioni PHP del mio ambiente di hosting stiano causando la sessione/cookie in scadenza ... Perché succederebbe questo?

+0

A causa di ciò che ho scritto nella mia risposta, hai cambiato la memorizzazione dei cookie. Ciò interrompe l'influenza delle impostazioni di PHP e server nelle sessioni. –

+0

Non sai chi ha contrassegnato la mia risposta? Notai anche che ''autoRegenerate' => true' fa in modo che si interrompa, così ha dovuto rimuovere anche quello! – Cameron

+0

Ci sono alcuni bug in CakePHP 2.1 che riprendono questo argomento. Ho lo stesso problema con una funzione di aggiornamento automatico che utilizza Ajax. Anche questo dovrebbe mantenere viva la sessione e non lo fa. Molto noioso. Devo guardare indietro al lavoro che ho fatto su questo argomento. Se date un'occhiata al valore locale e principale delle impostazioni della sessione in phpinfo() noterete alcune incoerenze con le impostazioni di cakephp. Ciò rende difficile il debug e la sollution implica la modifica del codice sorgente di cakephp. Che non consiglio di fare perché i problemi evidenti con gli aggiornamenti in seguito. – Jeroen

Problemi correlati