Cookie vs. sessioni


189

Ho iniziato a usare PHP un paio di mesi fa. Per motivi di creazione di un sistema di accesso per il mio sito Web, ho letto i cookie e le sessioni e le loro differenze (i cookie sono memorizzati nel browser dell'utente e le sessioni sul server). In quel momento, ho preferito i cookie (e a chi non piacciono i cookie ?!) e ho appena detto: "a chi importa? Non ho nessun buon affare a memorizzarli sul mio server", quindi sono andato avanti e ho usato i cookie per il mio progetto di laurea triennale. Tuttavia, dopo aver eseguito la maggior parte della mia app, ho sentito che per il caso particolare della memorizzazione dell'ID utente, le sessioni sono più appropriate. Quindi ho iniziato a pensare a cosa direi se la giuria mi chiedesse perché hai usato i cookie anziché le sessioni? Ho proprio questo motivo (che non ho bisogno di memorizzare informazioni interne sull'utente).? o è più di questo?
Potresti parlarmi dei vantaggi / svantaggi dell'utilizzo dei cookie per conservare l'ID utente?

Grazie per tutti voi in StackOverflow!


2
Entrambi i metodi memorizzano i dati . I cookie lo fanno sul lato client, cioè sull'archiviazione dei dispositivi dei visitatori. Le sessioni sono una "estensione" intelligente in quanto memorizzano solo un ID univoco sul lato client e tutti i dati effettivi sul lato server. Quando ricevono l'ID univoco dal cookie del client, sanno quali dati caricare sul server. Nella maggior parte dei casi, le sessioni saranno ciò di cui hai bisogno. A proposito, puoi gestirli entrambi con github.com/delight-im/PHP-Cookie in un modo più moderno.
Caw

A parte questo, il core di WordPress ha abbandonato l'uso delle sessioni diversi anni fa e ora utilizza solo i cookie . Interessante. Mi chiedo se lo abbiano fatto per rendere più semplice la distribuzione su un set di server con bilanciamento del carico e / o per ridurre i logout casuali dovuti alla garbage collection della sessione.
Simon East

Risposte:


230

Il concetto è l'archiviazione di dati persistenti tra i carichi di pagina per un visitatore web. I cookie lo memorizzano direttamente sul client. Le sessioni utilizzano un cookie come una sorta di chiave, da associare ai dati archiviati sul lato server.

Si preferisce utilizzare le sessioni perché i valori effettivi sono nascosti dal client e si controlla quando i dati scadono e diventano non validi. Se tutto fosse basato sui cookie, un utente (o hacker) potrebbe manipolare i propri dati sui cookie e quindi riprodurre le richieste al tuo sito.

Modifica: non penso che ci sia alcun vantaggio nell'uso dei cookie, oltre alla semplicità. Guardalo in questo modo ... L'utente ha qualche motivo per conoscere il proprio ID #? In genere direi di no, l'utente non ha bisogno di queste informazioni. La fornitura di informazioni dovrebbe essere limitata sulla base della necessità di conoscere. Che cosa succede se l'utente modifica il suo cookie per avere un ID diverso, come risponderà l'applicazione? È un rischio per la sicurezza.

Prima che le sessioni fossero di gran moda, in pratica avevo la mia implementazione. Ho memorizzato un valore univoco del cookie sul client e archiviato i miei dati persistenti nel database insieme a quel valore del cookie. Quindi, nelle richieste di pagine, ho messo insieme quei valori e avevo i miei dati persistenti senza lasciare che il client controllasse quello che era.


29
@JiminyCricket Non penso sia vero ... in tal caso, nessuno userebbe le variabili di sessione per memorizzare l'utente attualmente connesso - e tutti lo fanno. Sarebbe un enorme rischio per la sicurezza. Abbastanza sicuro che in genere l'ID di sessione venga memorizzato come cookie sul computer client e quindi venga confrontato sul lato server con i dati della sessione. Il server in genere non controlla le sessioni tramite indirizzo IP, piuttosto attraverso un valore di cookie.
John M.

1
Di recente ho appena iniziato a utilizzare di nuovo solo i cookie, semplicemente perché le sessioni non caricano le pagine se ce n'è un'altra attualmente in esecuzione dalla stessa sessione, a meno che non si prepari a ogni pagina session_write_close();quando ne hai bisogno. Rotolare il tuo ID univoco e abbinarlo a semplici cookie non è stato così difficile e mantiene tutte le pagine belle e scattanti.
Brian Leishman,

Pensi che dovrei usare le sessioni per l'autenticazione? Ha dei rischi per la sicurezza? Che ne dici di un hacker che cerca di cambiare il suo id di sessione, come risponderebbe il server (supponiamo che l'id di sessione indovinato sia valido)?
O-BL,

Utilizzare la sessione e quindi 2FA come sessione che può essere dirottata.
Zakir Sajib,

120

Idee di base per distinguere tra quei due.

Sessione:

  1. IDU è memorizzato sul server (cioè lato server)
  2. Più sicuro (a causa di 1)
  3. La scadenza non può essere impostata, le variabili di sessione scadono quando gli utenti chiudono il browser. (al giorno d'oggi è memorizzato per 24 minuti come predefinito in php)

Biscotti:

  1. IDU è memorizzato sul browser web (cioè lato client)
  2. Non molto sicuro, poiché gli hacker possono raggiungere e ottenere le tue informazioni (a causa di 1)
  3. È possibile impostare la scadenza (vedere setcookies () per ulteriori informazioni)

La sessione è preferita quando è necessario memorizzare informazioni / valori a breve termine, come variabili per il calcolo, la misurazione, l'interrogazione, ecc.

I cookie sono preferiti quando è necessario archiviare informazioni / valori a lungo termine, come l'account dell'utente (in modo che anche quando chiudono il computer per 2 giorni, il loro account verrà comunque effettuato l'accesso). Non riesco a pensare a molti esempi di cookie poiché non è adottato nella maggior parte delle situazioni.


6
Attenzione: questa NON è una buona risposta. Inizia abbastanza bene ma confonde le cose e termina con la disinformazione. Questa non è una spiegazione di sessione vs. cookie. È una spiegazione dei cookie di sessione vs. sessione + sessione. I cookie da soli non sono preferiti per i motivi indicati. I cookie di sessione + sessione sono preferiti per i motivi indicati.
markus,

Un altro errore è che hai influenza sulla durata della sessione tramite la configurazione di PHP.
markus,

1
Sessioni imposta ancora un cookie sul browser dell'utente, quindi questa spiegazione lato server-client non è accurata
Zalaboza,

la scadenza delle sessioni può essere impostata facilmente da qualsiasi applicazione. Il terzo punto è sbagliato. Inoltre hai dimenticato la quantità di dati che possono essere memorizzati in cookie vs sessione. Questo è un punto più significativo
saran3h

1
Cosa significa IDU?
Simon East

45
SESSIONS ENDS WHEN USER CLOSES THEIR BROWSER,

COOKIES END DEPENDING ON THE LIFETIME YOU SET FOR IT. SO THEY CAN LAST FOR YEARS

Questa è la principale differenza nella tua scelta,

Se vuoi che l'id venga ricordato per molto tempo, devi usare i cookie; in caso contrario, se si desidera solo che il sito Web riconosca l'utente per questa visita solo allora le sessioni sono la strada da percorrere.

Le sessioni sono memorizzate in un file generato dal tuo server PHP. Per ricordare quale file è per quale utente, php imposterà anche un cookie nel browser dell'utente che contiene questo ID del file di sessione in modo che nella loro prossima visita php leggerà questo file e ricaricherà la sessione.

Ora php di default cancella le sessioni ad ogni intervallo, e anche la convenzione di denominazione della sessione la fa scadere automaticamente. Inoltre, i browser non manterranno il cookie che contiene l'id di sessione una volta chiuso il browser o cancellata la cronologia.

È importante notare che al giorno d'oggi i browser supportano anche un altro tipo di motori di archiviazione come LocalStorage, SessionStorage e altri motori webdb che il codice javascript può utilizzare per salvare i dati sul tuo computer per ricordarti di te. Se apri la console javascript all'interno di Facebook, ad esempio, e digiti "localStorage" vedrai tutte le variabili che Facebook utilizza per ricordarti senza cookie.


16
In realtà, per impostazione predefinita una sessione dura fino a quando l'utente chiude il proprio browser, MA questo può essere modificato nel file php.ini modificando lo 0 in session.cookie_lifetime = 0 per essere il numero di secondi in cui si desidera che la sessione duri o utilizzando session_set_cookie_params ().
DOK,

1
Ulteriori informazioni utili, tale domanda che ottiene molte risposte .. fantastico, grazie ancora DOK!
Nadjib Mami,

1
Inoltre, tieni presente che è possibile creare i singoli file della sessione di errore. Quando anche il più piccolo attacco dos style si verifica tramite proxy, switcher ip o zombi, viene creato un file di sessione sul disco rigido del server o su ssd. Se non riesci a tenere il passo con le scritture di lettura, il tuo sito verrà chiuso.
Shawn E Carter,

qualcuno può clafiry: "SESSIONI FINALI QUANDO L'UTENTE CHIUDE IL SUO BROWSER" 1. cosa succede se l'utente naviga awya dalla pagina .. quindi torna indietro senza chiudere il browser. 2. cosa succede se hanno diverse finestre / schede del browser aperte che puntano allo stesso sito? alcune app Web al lavoro si confondono in questa situazione, ma non so quale tipo di cookie utilizzino.
jcansell,

1
@jcansell bene, un cookie non verrà confuso da più schede o navigando lontano, in tal caso molto probabilmente queste webapp hanno utilizzato l'archiviazione locale / archivio di sessioni per salvare i dati utilizzando javascript
Zalaboza,

20

quando salvi l'ID # come cookie per riconoscere gli utenti che hanno effettuato l'accesso, stai effettivamente mostrando agli utenti dati che non sono correlati a loro. Inoltre, se una terza parte tenta di impostare ID casuali come dati cookie nel proprio browser, sarà in grado di convincere il server di essere un utente mentre in realtà non lo è. Questa è una mancanza di sicurezza.

Hai utilizzato i cookie e, come hai detto, hai già completato la maggior parte del progetto. inoltre i cookie hanno il privilegio di rimanere a lungo, mentre le sessioni terminano più rapidamente. Quindi le sessioni non sono adatte in questo caso. In realtà molti siti Web e servizi famosi e popolari utilizzano i cookie e puoi rimanere connesso per molto tempo. Ma come puoi utilizzare il loro metodo per creare un processo di accesso più sicuro?

ecco l'idea: puoi aiutare il modo in cui usi i cookie: se usi chiavi casuali anziché ID per riconoscere gli utenti che hanno effettuato l'accesso, in primo luogo, non perdi i tuoi dati primari in utenti casuali e, in secondo luogo, se consideri Casuale chiave abbastanza grande, sarà più difficile per chiunque indovinare una chiave o crearne una casuale. ad esempio puoi salvare una chiave di 40 lunghezze come questa nel browser dell'utente: "KUYTYRFU7987gJHFJ543JHBJHCF5645UYTUYJH54657jguthfn" e sarà meno probabile per chiunque creare la chiave esatta e fingere di essere qualcun altro.


1
Bella spiegazione. Uso il GUID nel token per riconoscere i singoli utenti.
Karthik,

18

Risposta breve

Regole ordinate per priorità:

  • Regola 1. Non fidarti mai dell'input dell'utente: i cookie non sono sicuri. Utilizzare sessioni per dati sensibili.
  • Regola 2. Se i dati persistenti devono rimanere quando l'utente chiude il browser, utilizzare i cookie.
  • Regola 3. Se i dati persistenti non devono rimanere quando l'utente chiude il browser, utilizzare le sessioni.
  • Regola 4. Leggi la risposta dettagliata!

Fonte: https://www.lucidar.me/en/web-dev/sessions-or-cookies/


Risposta dettagliata

Biscotti

  • I cookie sono memorizzati sul lato client (nel browser del visitatore).
  • I cookie non sono sicuri: è abbastanza facile leggere e scrivere il contenuto dei cookie.
  • Quando si utilizzano i cookie, è necessario informare i visitatori in base alle leggi europee (GDPR).
  • La scadenza può essere impostata, ma l'utente o il browser possono cambiarla.
  • Gli utenti (o il browser) possono (essere impostati su) rifiutare l'uso dei cookie.

sessioni

  • Le sessioni vengono archiviate sul lato server.
  • Le sessioni utilizzano i cookie (vedi sotto).
  • Le sessioni sono più sicure dei cookie, ma non invulnabili.
  • La scadenza è impostata nella configurazione del server (ad esempio php.ini).
  • Il tempo di scadenza predefinito è di 24 minuti o alla chiusura del browser.
  • La scadenza viene ripristinata quando l'utente aggiorna o carica una nuova pagina.
  • Gli utenti (o il browser) possono (essere impostati su) rifiutare l'uso dei cookie, quindi delle sessioni.
  • Legalmente, devi anche informare i visitatori del cookie, ma la mancanza di precedenti non è ancora chiara.

La scelta appropriata

Le sessioni utilizzano un cookie! I dati della sessione vengono archiviati sul lato server, ma un UID viene archiviato sul lato client in un cookie. Consente al server di abbinare un determinato utente con i dati di sessione corretti. UID è protetto e difficile da hackerare, ma non invulnabile. Per le azioni sensibili (modifica della posta elettronica o reimpostazione della password), non fare affidamento su sessioni né cookie: chiedere la password dell'utente per confermare l'azione.

I dati sensibili non devono mai essere archiviati nei cookie (e-mail, password crittografate, dati personali ...). Tieni presente che i dati sono memorizzati su un computer esterno e se il computer non è privato (classe o computer pubblici) qualcun altro può potenzialmente leggere il contenuto dei cookie.

I dati da ricordare devono essere memorizzati nei cookie, altrimenti i dati andranno persi quando l'utente chiude il browser. Tuttavia, non salvare la password o i dati personali dell'utente nel cookie "ricordati di me". Archivia i dati utente nel database e collega questi dati con una coppia criptata di ID / chiave memorizzata in un cookie.

Dopo aver considerato le raccomandazioni precedenti, la seguente domanda è finalmente cosa ti aiuta a scegliere tra cookie e sessioni:

I dati persistenti devono rimanere quando l'utente chiude il browser?

  • Se la risposta è , utilizzare i cookie .
  • Se la risposta è no , utilizzare le sessioni .

13

In realtà, sessione e cookie non sono sempre cose separate. Spesso, ma non sempre, la sessione utilizza i cookie.

Ci sono alcune buone risposte alla tua domanda in queste altre domande qui. Poiché la tua domanda riguarda specificamente il salvataggio dell'IDU (o ID) dell'utente, non penso che sia abbastanza un duplicato di quelle altre domande, ma le loro risposte dovrebbero aiutarti.

cookie vs sessione

Cache VS Session VS cookie?

Qual è la differenza tra una sessione e un cookie?


10

Uso personalmente sia i cookie che la sessione.

Cookie utilizzati solo quando l'utente fa clic sulla casella di controllo " Ricordami " . e anche i cookie sono crittografati e i dati vengono decrittografati solo sul server. Se qualcuno tenta di modificare i cookie, il nostro decodificatore è in grado di rilevarlo e rifiutare la richiesta.

Ho visto così tanti siti in cui le informazioni di accesso sono memorizzate nei cookie , chiunque può semplicemente modificare l'ID e il nome utente dell'utente nei cookie per accedere all'account di chiunque.

Grazie,


2

Sessione e cookie non sono uguali.

Una sessione viene utilizzata per memorizzare le informazioni dalle pagine Web. Normalmente le pagine Web non hanno ricordi per memorizzare queste informazioni. Ma usando possiamo salvare le informazioni necessarie.

Ma i cookie vengono utilizzati per identificare gli utenti. Utilizzando i cookie possiamo archiviare i dati. È una piccola parte dei dati che verranno archiviati nel browser dell'utente. Pertanto, ogni volta che l'utente naviga la prossima volta che il browser invia indietro le informazioni sui dati dei cookie al server per ottenere le attività precedenti.

Crediti: sessione e cookie


Cosa succede se l'utente disabilita i cookie? Come i cookie identificano l'utente?
SohailRajput,

1

Le sessioni consentono di archiviare singole informazioni come con i cookie, ma i dati vengono archiviati sul server anziché sul client.


0

Come altri hanno affermato, le sessioni sono intelligenti e hanno più vantaggi di nascondere le informazioni al cliente.

Ma i cookie hanno ancora almeno un vantaggio , puoi accedere ai tuoi cookie da Javascript (ad esempio ngCookies ). Con la sessione PHP non puoi accedervi da nessuna parte al di fuori dello script PHP.


1
Puoi .. Non direttamente, ovviamente, ma puoi accedervi tramite una richiesta Ajax allo script che restituisce i dati della sessione. Ma non sono sicuro che dovresti.
lkk,

0

Selezionerò Sessione, prima di tutto la sessione è più sicura dei cookie, i cookie sono i dati del sito client e la sessione sono i dati del sito server. I cookie vengono utilizzati per identificare un utente, poiché sono piccoli frammenti di codice che incorporano il mio server nel browser del computer dell'utente. D'altra parte, Session ti aiuta a proteggere la tua identità perché il server web non sa chi sei perché l'indirizzo HTTP cambia lo stato da 192.168.0.1 a 765487cf34ert8ded… ..o qualcos'altro con l'aiuto dei metodi GET e POST. La sessione memorizza i dati dell'utente in una sessione ID univoca che nemmeno l'ID utente può corrispondere tra loro. La sessione memorizza le informazioni del singolo utente in tutte le pagine di un'applicazione. I cookie scadono sono impostati con l'aiuto di setcookies () mentre la sessione scaduta non è impostata ma scade quando l'utente spegne il browser.


0

Una sessione è un gruppo di informazioni sul server associato alle informazioni sui cookie. Se stai usando PHP puoi controllare la sessione. salva _ percorso percorso e in realtà "vedi sessioni". Un cookie è uno snippet di dati inviati e restituiti dai client. I cookie vengono spesso utilizzati per facilitare le sessioni in quanto indica al server quale client ha gestito quale sessione. Esistono altri modi per farlo (query string magic ecc) ma i cookie sono probabilmente i più comuni per questo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.