PDA

View Full Version : [PHP] cookies


ianaz
18-07-2006, 07:54
salve,
necessito di settare dei cookies nel mio sito... e vi devo porre una domanda:

1:

cookies must be sent before any output from your script

siccome faccio l'autologin, come posso fare senza che prima ci sia un output? Prima ho degli include (contententi degli output) che non posso togliere...come posso fare?
Ho pensato ad inserire i dati in una tabella e se poi l'utente vuole l'autologin setta un campo a 1 nella tabella...ma non c'é modo di settare il cookie nella pagina che verifica se l'utente vuole che si autologga?
Intendo questo:

// sopra c'é codice HTML
if(isset($_POST['autologin'])){
setcookie(...);
}

EDIT: ho trovato la funzione ob_flush...può centrare qualcosa? :)


grazie

max246
18-07-2006, 09:53
salve,
necessito di settare dei cookies nel mio sito... e vi devo porre una domanda:

1:

siccome faccio l'autologin, come posso fare senza che prima ci sia un output? Prima ho degli include (contententi degli output) che non posso togliere...come posso fare?
Ho pensato ad inserire i dati in una tabella e se poi l'utente vuole l'autologin setta un campo a 1 nella tabella...ma non c'é modo di settare il cookie nella pagina che verifica se l'utente vuole che si autologga?
Intendo questo:

// sopra c'é codice HTML
if(isset($_POST['autologin'])){
setcookie(...);
}

EDIT: ho trovato la funzione ob_flush...può centrare qualcosa? :)


grazie


ianaz ianaz ianaz...

allora nei cookie setti dei parametri che ti aiutano a ricostruire la sessione, tipo:
-nome utente
-passowrd ( criptata )

fatto ciò quando trovi il cookie nel computer ( isset($_COOKIe..... ) ti fai il tuo bel controllo se esiste l'utenet e la password è giusta... e setti la sessione :)

ianaz
18-07-2006, 09:59
si ma per l'autologin é diverso... :)

max246
18-07-2006, 10:18
ti picchio nn cambia -.- se ha il cookie settato con scritto AUTOLOGIN = 1 come fai a scoprire che è PIPPO e non CLAUDIO? ....

metti un'utente e una password, le trova quei due cookie settati fa il login se no gli chiede il login ...

ianaz
18-07-2006, 10:48
ti picchio nn cambia
sai sotto quanti metri di sabbia é l'ultima persona che ha voluto picchiarmi?

per il resto....
se setto un cookie con $VALORE||$USERNAME||$PASSWORD
e se trova il cookie verifica sul db se quell'username ha settato l'autologin a 1 ti fa il login in automatico, altrimenit no....

dovrebbe funzionare no?!

satoshi2005
19-07-2006, 05:48
max ha ragione.. è poi quello che ti dicevo io..

ianaz
19-07-2006, 06:35
Si ma nel database inserivo pure username e password oltre al campo autologin...

cionci
19-07-2006, 08:58
Attenzione a far viaggiare user e pass così in chiaro...ricordati che i cookie vengono sempre passati quando viene visualizzato un idnirizzo che soddisfa le richieste del cookie... Quindi in poche ore con uno sniffer sarebbe possibile trovare le pass di particamente tutti gli utenti...senza contare che basterebbe leggere qualche file sul client per trovare i dati di autenticazione...

Se il sito deve essere "serio" ti consiglio di fare diversi cambiamenti:

1) metti la pagina di login in un percorso diverso ad esempio /autologin/login.php e setta il cookie con l'autenticazione per inviare i dati solo nel percorso /autologin...

2) setta un cookie generico "autologin" che viene inviato a qualsiasi pagina del tuo sito: se esiste il coockie "autologin" redireziona il client verso /autologin/login.php passando come parametro l'url corrente (o memorizzando l'eventuale azione da compiere nei dati di sessione in caso di POST)

3) componi il cookie di autenticazione come: "Username", "fingerprint"...in "fingerprint" inserirai la stringa md5 realizzata a partire dalla "password" concatenata con "ultima data e ora di autenticazione"...

4) se l'autenticazione ha successo aggiorna "ultima data e ora di autenticazione" con la data corrente ed invia il nuovo cookie con il campo "fingerprint" aggiornato con la nuova data

5) salta all'indirizzo precedente, così risolvi il problema degli include...infatti non hai bisogno di farli in una pagina temporanea come questa o comunque puoi farli dopo l'autenticazione...

PS: hai la firma irregolare, l'immagine è troppo grande e con un'immagine esterna la firma deve stare su una sola riga...

ianaz
19-07-2006, 09:11
PS: hai la firma irregolare, l'immagine è troppo grande e con un'immagine esterna la firma deve stare su una sola riga...
Sistemato, sorry :)


1) metti la pagina di login in un percorso diverso ad esempio /autologin/login.php e setta il cookie con l'autenticazione per inviare i dati solo nel percorso /autologin...

Come mai solo nel percorso /autologin? Non capisco cosa cambi...se riescono a capire la cartella é inutile...no?!


3) componi il cookie di autenticazione come: "Username", "fingerprint"...in "fingerprint" inserirai la stringa md5 realizzata a partire dalla "password" concatenata con "ultima data e ora di autenticazione"...

Non ho capito questa...
cioé,

$valore_cookie = $data_ora.md5($password);

e lo salvo in un cookie chiamato fingerprint???

P.S: Ma l'md5 é così facile da decriptare?


Grazie ;)

cionci
19-07-2006, 09:22
Solo nel percorso autologin in modo che il cookie di autenticazione venga inviato dal client SOLO quando sei in quel percorso e non nel resto del sito...

L'md5 (o si può utilizzare anche sha1, che è ancora più lungo) non può essere decriptato perchè non è invertibile, in questo caso può solo essere usata la forza bruta per trovare la sequenza (mica facile ;)).

Componi il cookie che chiami "auth" in questo modo: $username." ".$fingerprint (se non sono ammessi spazi nello username)

$fingerprint = sha1($password.$data_ultimo_login);

ianaz
19-07-2006, 09:30
Okyz grazie.

Tengo l'md5 dato che é già fatto tutto così, però avrei un ulteriore domanda...
dato che dovrei fare una cartella "autologin", faccio praticamente un

if(isset($_COOKIE['auth'])){
manda a /autologin
}


giusto?

grazie ancora...

cionci
19-07-2006, 14:59
Sì...