2010-01-11 18 views
5

un corpo ha informazioni/collegamenti su come integrare un sistema di sessione basato su cookie? ho usato file/mysql e attualmente sto usando memcached. Volevo giocare con le sessioni di apc, ma pensavo di dare un colpo ai cookie, solo che non ne so molto.php: sessioni basate su cookie

Immagino che dovrei scrivere la mia classe di gestore di sessione?

+0

Non sono sicuro di seguirlo. Intendi memorizzare i dati di sessione nei cookie? È una buona idea? –

+0

Si noti che i cookie possono memorizzare solo un massimo di 4 KB di dati. Questo è in genere il motivo per cui non viene visualizzata la memorizzazione della sessione basata sui cookie.Inoltre, prendere in considerazione il fatto che un certo numero di utenti ha disattivato completamente i cookie o impostato l'accesso restrittivo con la propria politica di sicurezza del browser. –

+1

@cballou: le vecchie sessioni regolari di solito utilizzano anche i cookie. Tuttavia, memorizzano il SESSID e il resto dei dati viene archiviato sul server. Anche se penso che PHP proverà a inserire il SESSID nel parametro 'GET' se i cookie sono disabilitati. – mpen

risposta

5

In PHP i dati di sessione vengono solitamente memorizzati in un file. L'unica cosa memorizzata nel cookie è un identificatore di sessione. Quando le sessioni sono abilitate e viene trovato un cookie di sessione valido, PHP carica i dati della sessione degli utenti dal file in una SESSIONE straordinariamente divertente chiamata super globale.

Le sessioni di base vengono avviate utilizzando session_start(); chiamato prima che qualsiasi testo venga inviato al browser. quindi gli oggetti vengono aggiunti o rimossi dall'oggetto di sessione utilizzando semplici indici di array, ad es.

$_SESSION['favcolour'] = 'blue'; 

tardi ...

$favcolour = $_SESSION['favcolour']; 

biscotto di base solo le sessioni (senza memorizzazione locale) possono essere creati con una chiamata a

set_cookie('favcolour','blue'[,other params]); 

prima di ogni testo viene inviato al browser, quindi recuperato dal cookie superglobale

$favcolour = $_COOKIE['favcolour']; 

non è necessario chiamare session_start() se si eseguono sessioni solo cookie.

i opzionale [, altri params] sono più avanzate e possono essere letti su qui http://www.php.net/manual/en/function.setcookie.php

Le sessioni possono diventare una discussione molto complessa, io suggerirei di fare qualche lavoro leggero in loro e quindi espandere la vostra conoscenza.

DC

tutto quello che avreste voluto sapere su sessioni PHP

http://www.php.net/manual/en/book.session.php

DC

Per riutilizzare codice di gestione della sessione di PHP è necessario aggiungere un gestore di scrittura utilizzando session_set_save_handler e poi fare esattamente nulla in quel gestore. Questo perché viene chiamato dopo che l'output del browser è chiuso, quindi non è possibile inviare nulla al browser.

Prima di scrivere dati non di intestazione nel browser, utilizzare le funzioni set_cookie e memorizzare il contenuto dell'array $ _SESSION (dopo la serializzazione e la crittografia) in un cookie. quando le applicazioni iniziano, puoi leggere il cookie unserializzarlo e metterlo nell'array $ _SESSION.

Questo è un rapido suggerimento su cosa fare come non l'ho mai fatto, preferisco scrivere tutto il mio codice cookie. Potrebbero esserci dei problemi, ma non è difficile che alcuni test trovino i segreti.

DC

+0

Probabilmente non andrei su cookie solo, soprattutto se non si desidera che gli utenti manomettano (o leggano) i dati. – mpen

+0

se le sessioni basate su file del sito Web sono molto impegnative sono troppo dispendiose in termini di risorse. ma se volessi la sicurezza sopra ogni altra cosa, userei un db, perché i file possono essere letti. – DeveloperChris

+2

Non ho bisogno di sapere come usare le sessioni. lo capisco perfettamente le sessioni basate sui cookie (non la memorizzazione dell'identificatore nei cookie) sono una tecnica valida che riduce al minimo il numero di ricerche di db/file/cache del server e memorizza tutti i dati per una sessione in un cookie crittografato. Immagino che nessuno qui capisca cosa intendo. – onassar