Newsgroup: it.comp.www.php
Titolo: Sessioni

Trovo alcuni problemi nel gestire le sessioni correttamente...
per me tutto funziona perfettamente, ma ci sono tanti utenti che non
riescono a visualizzare il sito correttamente o le cui sessioni scadono
troppo frequentemente.
Chi non ha i cookies abilitati puo' incontrare problemi con le sessioni php?
Se si, come posso ovviare a questo problema senza dover aggiungere il
PHPSESSID ad ogni URL?
Grazie.

                    Il 13 Lug 2004, 10:20, "Marco" <marc...@NONMETTEREQUESTOfastwebnet.it> ha
scritto:

Ciao,
il sistema delle sessioni PHP di default utilizza i cookie per passare l'id,
se il browser dell'utente li rifiuta e non passi l'id via url le cose non
possono andare.
Se si tratta di un'area riservata ti consiglio di non usare l'url e
costringere gli utenti ad accettare i cookie: l'utilizzo dei cookie è più
sicuro sotto numerosi punti di vista.
Se invece usi le sessioni per altri scopi il passaggio nell'url va
benissimo, dai un'occhiata alle impostazioni del php.ini e a ini_set
http://it.php.net/ini_set
Fabio
 
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 
http://it.php.net/ini_set
No, il passaggio nell'url lo voglio evitare, ma speravo di trovare un modo
per evitare anche i coockies.
Anche se sembra banale, un sacco di gente non riesce ad accedere al mio sito
per colpa dei cookies disabilitati, o per firewalls che li bloccano rendendo
le sessioni inutilizzabili....
E tutto quello che mi devo portare dietro è un ID dell'utente che salvo
nella sessione.
E' frustrante ricevere un sacco di messaggi di protesta di gente che non
riesce a connettersi, o cambia PC e da quel momento non accede piu'.


Per mantenere lo stato nel web non c'è molta scelta, o cookie o url:
che tu usi PHP o qualsiasi altra piattaforma le cose non cambiano.
E se uno cambia Pc è giusto che rifaccia login.
La cosa strana invece è che il firewall blocchi i cookie....non è che c'è
qualche settaggio che non va?


 qualche settaggio che non va?
Me lo chiedo anch'io...eppure non ho toccato le configurazioni per le
sessioni...

 le sessioni inutilizzabili....
Il firewall non blocca i cookie.
Molto più probabilmente è colpa di software tipo norton che possono inibire
i cookie.
Tuttavia non hai molta scelta.
Esiste però un mod di apache (di cui non ricordo il nome) che inserisce il
sessioid in GET ad ogni richiesta.
Ciao
Marco


si, lo conosco, ma non lo voglio....
questi sono i settaggi per le sessioni... vedi qualcosa di strano?
[Session]
; Handler used to store/retrieve data.
session.save_handler = files
session.save_path = /tmp
session.use_cookies = 1
; This option enables administrators to make their users invulnerable to
; attacks which involve passing session ids in URLs; defaults to 0.
; session.use_only_cookies = 1
session.name
 = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 1800
session.cookie_path = /
session.cookie_domain =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor     = 100
session.gc_maxlifetime = 1440
session.bug_compat_42 = 1
session.bug_compat_warn = 1
session.referer_check =
session.entropy_length = 0
session.entropy_file =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset="


session.cookie_lifetime = 1800
Significa che la sessione scadrà sempre e comunque dopo 30 minuti (che sia
online o no) perchè il cookie che lo collega lla sessione sparisce.
Io te lo sconsiglio (meglio mettere un bel 0 così la sessione scade alla
chiusura del browser) ma se vuoi che l'utente recuperi la sessione dopo che
ha chiuso il browser devi settare un tempo molto maggiore e pari a quello
che darai a
session.gc_maxlifetime (altrimenti il cookie rimane ma il file di sessione
sparisce)
Come scelta non mi piace molto comunque.
Molto meglio fare così secondo me:
parallelamente alla sessione setti un cookie indipendente che contiene l'id
della sessione e che ha durata molto lunga,
metti session.cookie_lifetime = 0 (il cookie di sessione scade alla chiusura
del browser), metti session.gc_maxlifetime = [tantissimo]
Quando l'utente torna dopo essere uscito, gli fai rifare login controlli il
cookie indipendente, se c'è, e, se tutto va bene, gli riproponi i dati della
sua vecchia sessione.
Secondo me è quasi indispensabile ce utilizzi le sessioni su database (come
sai php te lo consente)


 del browser), metti session.gc_maxlifetime = [tantissimo]
questo č quello che ho alla login (un cookie di 10 minuti)
session_start();
setcookie("PHPSESSID",session_id(),time()+600);
poi, in ogni altra pagina
if(isset($_REQUEST[session_name()])) {
 session_start();
 setcookie("PHPSESSID",session_id(),time()+600);
} else {
 header( "Location: session_expired.php" );
}


Stai sovrascrivendo il cookie di sessione dopo che lo hai appena creato con
session_start(), c'è una ragione valida?
Io parlavo di un tuo cookie, un altro cookie


 Io parlavo di un tuo cookie, un altro cookie
hmmmno, in effetti non ha molto senso... la parte delle sessioni non l'ho
curata io e adesso ci stavo smanettando sopra un po'....

Io uso sempre il sessionid nell'url ma se tu vuoi complicare la vita
inutilmente ti potresti creare una tabella (con un DBMS) contenente gli IP
degli utenti loggati: insomma anzichč far gestire le sessioni al PHP te le
gestisci tu con un elenco di indirizzi ip che consideri validi per i
contenuti riservati.
Anche se potrebbe essere poco sicuro nel caso di piů utenti (per esempio in
una lan) che utilizzano lo stesso gateway.
"Marco" <marc...@NONMETTEREQUESTOfastwebnet.it> ha scritto nel messaggio
news:nXMIc.79213$G%.41277@tornado.fastwebnet.it...


 ha scritto nel messaggio
news:cd46te$sh$1...@lacerta.tiscalinet.it...



Il session id nell'url rischia di essere un grave errore quando si applica
alle sessioni in un area riservata o nell'e-commerce.
Per fare un esmpio banale metti che l'utente invii un link ad un amico,
questo conterrà l'id di sessione. L'amico ci clicca sopra e si ritrovanella
sessione altrui.
Questa eventualità ti costringe, se prorpio vuoi usare l'id nell'url a
rigenerare l'id di sessione ad ogni accesso, per render eminima la
posibilità di un subentro accidentale.
Poi vi sono i casi in cui il session hijacking non è accidentale, ma è un
discorso lungo.
Nei casi descritti sopra io consiglio addirittura di attivare in php.ini
session.use_only_cookies (non è un caso che questa opzione sia stata
introdotta nelle versioni più recenti di php) , cioè non limitarsi a
disabilitare il trans_id.
L'IP non è per nulla affidabile, può fornire sia falsi positivi che falsi
negativi: dietro un ip possono nascondersi più macchine e la stessa macchina
può ottenere un ip diverso durante la navigazione con certi provider.
