Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    problemi cookie e sessioni su IE

    Sto avendo un problema solo su IE con i cookie e le sessioni.

    In un sito registro dei cookie utili per le visite successive, per esempio per memorizzare la lingua scelta dall'utente per l'interfaccia; allo stesso tempo uso la sessione per passare le variabili necessarie per la visita attuale.

    Su Firefox e Safari va tutto come previsto: la sessione scade ma tutti i cookie rimangono fino alla data stabilita.

    Su IE per Windows, invece, succede questo: quando la sessione scade, stranamente scadono anche i cookie che dovrebbero rimanere per le visite successive; e quindi:
    - se l'utente ha scelto una certa lingua per l'interfaccia si ritrova poi con la lingua di default;
    - se l'utente era loggato, non essendoci più le variabili di sessione coi dati del login e non trovando i dati di autologin negli appositi cookie, l'utente si trova sputato fuori e deve rifare il login.

    La cosa succede su un hosting Aruba, dove la sessione scade dopo un certo tempo anche se l'utente non chiude il browser; se invece la sessione viene terminata chiudendo il browser, il problema non c'è (mi pare).

    Perché succede? IE mischia il cookie di sessione con gli altri cookie?

  2. #2
    a nessuno è mai successo?

  3. #3
    ... è normale: se invece vuoi far durare il cookie per esempio per un anno ti basterebbe fare in questo modo:

    Codice PHP:
    setcookie('nomecookie''valore'time()+60*60*24*365'altre_impostazioni_ecc'); 

  4. #4
    ... ed altra cosa importantissima: passare valori con le sessioni è una cosa! Passarli con i cookies è un'altra!

  5. #5
    Grazie nickang

    I cookie li imposto esattamente così (nome, valore e data di scadenza); e attraverso i cookie registro le preferenze utili per le visite successive (come la lingua scelta o l'autologin).
    Attraverso le variabili di sessione ovviamente passo altri valori.

    Il problema, forse non mi sono spiegato bene, è questo:
    su IE (e solo su IE, non sugli altri browser) questi cookie non durano fino alla data di scadenza, ma scompaiono allo scadere della sessione.

  6. #6
    i cookies di sessione sono temporanei se la scadenza e' determinata alla chiusura del browser. Il cookie di sessione viene inviato in modo automatico in accordo ai parametri impostati nel php.ini

    La scadenza della sessione ha due fronti, lato CLIENT col tempo definito dal php.ini di default alla chiusura del browser, e lato SERVER invece si ha la scadenza per inattivita', sempre con tempo definito nel php.ini, del file di sessione.

    Pare che tu faccia un mixer tra i cookie, uno tuo con una tua scadenza e uno di sessione (automatico) con altra. Se la sessione scade perdi i dati memorizzati, pero' il tuo cookie dovrebbe mantenere la sua validita' fino alla scadenza prevista.

    Si hanno pure comportamenti lievemente diversi tra i vari browser. per esempio aprire una seconda finestra con explorer ti porta nella stessa posizione della finestra da cui apri, firefox ti apre la pagina di default. la differenza? in un caso risulti gia' identificato, nell'altro no.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Aggiungo un po' di dettagli:

    Codice PHP:
    session_start();

    if(isset(
    $_POST['lang'])) 
        
    $lang=$_SESSION['language']=$_POST['lang'];
    else if(isset(
    $_SESSION['language']))
        
    $lang=$_SESSION['language'];
    else if(isset(
    $_COOKIE['prefs']['language']))
        
    $lang=$_SESSION['language']=$_COOKIE['prefs']['language'];
    else
        
    $lang=$_SESSION['language']='en';
        
    setcookie("prefs[language]",$lang,time()+2592000*12);
    require(
    "lang/$lang.inc.php"); 
    In pratica stabilisco una variabile $lang per caricare il file con la lingua giusta e per varie altre scelte.
    Questa variabile viene stabilita - in ordine di priorità - in base alla lingua scelta dall'apposito menu o in base alla lingua dell'attuale sessione (se presente) o in base al cookie; altrimenti si carica la versione inglese.

    Ora se scade la sessione, o se l'utente torna per una seconda visita, viene scelta la lingua salvata nel cookie per un anno; come dice piero.mac:
    Se la sessione scade perdi i dati memorizzati, pero' il tuo cookie dovrebbe mantenere la sua validita' fino alla scadenza prevista.
    E con Firefox, Safari, Opera succede così; tutto abbastanza logico.

    Ma con IE, allo scadere improvviso della sessione, riparte dalla lingua di default; e se vado a vedere i cookie, prefs[language] effettivamente non c'è!
    Il cookie della lingua non è stato conservato; e lo stesso vale per quelli dell'autologin: l'utente si ritrova loggato fuori.
    Succede a tutti i tester che usano IE; quindi escludo le impostazioni del browser.

    Mistero...

  8. #8
    Non mi torna la cosa.... ho fatto due prove con il tuo script.

    firefox
    codice:
    Name	PHPSESSID
    Value	5fborrii22hk6nqo2g5rgibjg3
    Host	localhost
    Path	/
    Secure	No
    Expires	At End Of Session
    
    Name	prefs[language]
    Value	en
    Host	localhost
    Path	/aaa-TESTING/
    Secure	No
    Expires	At End Of Session
    mentre con explorer ottengo:
    codice:
    prefs[language]
    en
    localhost/aaa-TESTING/
    1024
    1957962752
    29789413
    3780772768
    29789217
    *
    mentre il cookie di sessione non posso leggerlo su explorer.

    come vedi firefox ha l'expire at session end, mentre explorer ha un tempo di scadenza (ho messo time() + 84000.

    infatti facendo dei check sul contenuto degli array mi risulta che explore mi rende il contenuto del cookie, mentre firefox mi rende il valore di "else"

    basta cambiare il valore per valutare....


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    ho rifatto il test semplificando e modificando i dati del file della sessione.

    dopo la chiusura del browser da explorer ottengo il valore del cookie, da firefox il valore del default definito in else.

    in entrambi i casi se apro una nuova finestra ottengo il valore del file di sessione....

    mi pare che con firefox un proprio cookie inviato durante una sessione assuma la stessa scadenza del cookie di sessione.... provero' ancora modificando la scadenza della sessione... tanto per....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  10. #10
    ultima prova con Opera. ho messo 1200 secondi la scadenza del cookie di sessione.

    Opera, firefox e explorer si comportano allo stesso modo. Cioe' come atteso, cioe' reso il valore della sessione.

    ho rifatto le prove con la scadenza del cookie di sessione alla chiusura del browser e tutti e tre mi hanno reso il cookie con il language.

    firefox prima non andava perche' tengo settata la ripulitura del browser alla chiusura di sessione. Ora ho normalizzto tutte e tre le impostazione ed i risultati sono assolutamente identici....

    evidente che eventuali impostazioni contano eccome.... quindi per me tutti e tre i browser si comportano secondo le attese.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.