Visualizzazione risultati 1 fino 14 di 14

Discussione: [php] Perchè i COOKIES non rispettano la durata?

  1. #1
    Guest

    Predefinito [php] Perchè i COOKIES non rispettano la durata?

    codice che salva il cookie:
    Codice PHP:
    session_start();
    session_register('username');
    $expires = 60 * 60 * 24 * 365; //Dura un bel annetto eh
    $expires += time();
    setcookie('username', $_POST['username'], $expires);
    $_SESSION['username'] = $_POST['username'];
    codice che controlla se il cookie è presente:
    Codice PHP:
    session_start();
    if(
    $_SESSION['username'])
    {
    $logged = 1;
    }
    else
    {
    if(
    $_COOKIE['username'])
    {
    session_register("'" . $_COOKIE['username'] . "'");
    $_SESSION['username'] = $_COOKIE['username'];

    $logged = 1;
    }
    else
    {
    $logged = 0;
    }
    }
    Ho aggiunto anche il controllo sui COOKIES perchè magari non è eseguito bene e quindi anche se il COOKIE dura a lungo, è come se non ci fosse.
    Ultima modifica di netpost : 09-04-2011 alle ore 17.32.00

  2. #2
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito

    Non sono sicuro di quello che dico, ma credo che sarebbe meglio inizializzare la variabile $expires in questo modo:

    Codice PHP:
    $expires = time() + 60 * 60 * 24 * 365;
    Se intendi far scadere il cookie dopo un'anno, credo che dovresti inizializzare la variabile in questo modo:

    Codice PHP:
    $expires = time() + 3600;
    Credo che non ti registra il cookie perché hai invertito questa espressione.

    Prova cosi.

    Sevenjeak
    Software developer and much more

  3. #3
    Guest

    Predefinito

    No niente, non funziona con nessuno dei due metodi elencati da te, intanto provo con altri metodi (se ce ne sono, o comunque cerco qualche guida)

  4. #4
    palla000 non è connesso Utente attivo
    Data registrazione
    12-07-2008
    Residenza
    trieste
    Messaggi
    278

    Predefinito

    comunque secondo me è meglio se usi isset sul controllo delle sessioni e dei cookies

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da palla000 Visualizza messaggio
    comunque secondo me è meglio se usi isset sul controllo delle sessioni e dei cookies
    cerco una guida per capire cosa cambia, poichè io controllo il contenuto della sessione e/o del cookie, quindi mi serve sapere se ha salvato il suo username o no, poi boh, magari ISSET è più corretto, comunque, a parte questo:

    http://img191.imageshack.us/img191/6623/senzanome1z.jpg

    ecco cosa mi dà l'Ispeziona Elemento di Chrome appena dopo il login: non salva alcun cookie oltre che alla sessione con session_register();

  6. #6
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,292

    Predefinito

    Il codice che salva i cookie all'inizio del post, dove si trova? Se quel codice fa dell'output, il cookie non puo' piu' essere inviato. Magari c'e' un warning perche' session_register() e' deprecata? (togli la chiamata, e' comunque inutile)

  7. #7
    Guest

    Predefinito

    Il codice si trova in una pagina PHP su cui viene rendirizzato l'utente da un form di login tramite l'attributo action, quindi:
    FORM > Invio dei dati tramite POST a pagina PHP > Controlli vari... Salvo cookies e sessione > Reindirizza alla pagina index, loggato.

  8. #8
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,292

    Predefinito

    Ecco, prima del reindirizzo metti un die(), e verifica che non ci siano messaggi di errore.

  9. #9
    Guest

    Predefinito

    il bello è che non da errori, se provo facendo (anche)
    Codice PHP:
    echo $_COOKIE['username'];
    me lo returna giusto, e ciò mi sembra abbastanza illogico, poichè anche dopo 1 secondo dal login, il cookie non c'è.. quindi credo che non venga creato o che la durata sia troppo lunga e quindi, appunto, non creato.

    edit:

    ora provo ad accorciare la durata a un mese, che mi sembra molto ragionevole

    niente di niente
    Ultima modifica di netpost : 17-04-2011 alle ore 20.14.15

  10. #10
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,292

    Predefinito

    Il codice è ancora uguale all'inizio?
    Puoi mettere su due pagine di prova in modo da poter riprodurre il problema?
    Sei certo di non aver settato Chrome per filtrare i cookie, anche solo da particolari dominii, o via add-on?

  11. #11
    Guest

    Predefinito

    Sì, sto solo provando a cambiare la variabile expires e qualcosina di test, ma visto che non va comunque, torno al codice di partenza.

    Sì, quando lo faccio edito questo messaggio, dato che ora non ho tempo.
    EDIT: http://netpost.altervista.org/da_can...set_cookie.php metto degli echo del codice intero con link alla pagina di controllo.
    Oddio, perchè funziona?

    Sì sì, ma anche perchè ho 6 amici che entrano sul sito ed ogni volta devono loggare.

    Codice 'set_cookie.php':
    Codice PHP:
    session_start();
    session_register('username');
    setcookie('username', 'il_tuo_username', time()+60*60*24*365);
    $_SESSION['username'] = 'il_tuo_username';

    if(
    $_SESSION['username'])
    {
    echo
    "
    if($"
    . "_SESSION['username']) <- funziona: " . $_SESSION['username'] . "
    <br />
    "
    ;

    if(
    $_COOKIE['username'])
    {
    echo
    "
    if($"
    . "_COOKIE['username']) <- funziona: ". $_COOKIE['username'] . "
    <br />
    "
    ;
    }
    else
    {
    echo
    "
    Funziona solo la sessione, te pareva.
    <br />
    "
    ;
    }
    }
    else
    {
    if(
    $_COOKIE['username'])
    {
    echo
    "
    if($"
    . "_COOKIE['username']) <- funziona: ". $_COOKIE['username'] . "
    <br />
    "
    ;
    }
    else
    {
    echo
    "
    Non funziona nulla.
    <br />
    "
    ;
    }
    Il codice qua sopra funziona, quindi il problema sta nell'altro codice, quello vero, che però ha di diverso solo 'il_tuo_username' che sarebbe $_POST['username'] ma ci ho già fatto dei controlli...
    Ultima modifica di netpost : 17-04-2011 alle ore 20.08.09

  12. #12
    Guest

    Predefinito

    Ho editato la Risposta sopra, con tutti i dettagli aggiuntivi riguardo la pagina di prova (le pagine) e i rispettivi codici, così da rendere possibile il test, anche se il codice qua sopra funziona, quindi il problema sta nell'altro codice

  13. #13
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,292

    Predefinito

    OT: continuo a vedere dei session_register() che non dovrebbero esistere, toglili.

    Rimangono due cose:
    • il parametro path di setcookie(): mettilo a '/' per sicurezza, in modo che il cookie si disponibile ovunque e non solo nella sottodirectory in cui è stato creato, che il default

    • $_POST['username'] - se è vuoto, cancelli il cookie, e mi fa venire sospetti. Metti un bel
      Codice PHP:
      if (!$_POST['username']) die ('aaaaaaaaaaargh!');
      subito prima della chiamata a setcookie, e guarda che succede.

  14. #14
    Guest

    Predefinito

    Codice 'set_cookie.php':
    Codice PHP:
    setcookie('username', 'il_tuo_username', time()+60*60*24*365, '/');
    echo ...

    if(
    $_COOKIE['username'])
    {
    echo ...
    }
    else
    {
    echo
    "
    Il cookie è vuoto.
    <br />
    "
    ;
    }
    ed il codice della pagina con i problemi:
    Codice PHP:
    $connect = mysql_connect(***);
    mysql_select_db("my_netpost", $connect)
    or die (
    mysql_errno().": <b>".mysql_error()."</b>");
    $select_user = mysql_query('SELECT username, password FROM ***
    WHERE username = "'
    . $_POST['username'] . '"
    AND password = "'
    . $_POST['password'] . '"');

    if (
    mysql_num_rows($select_user) != 0)
    {
    session_start();
    session_register('username');
    setcookie('username', $_POST['username'], time()+60*60*24*365, '/');
    $_SESSION['username'] = $_POST['username'];
    header("Location: /");
    }
    else
    {
    login fallito
    }
    Nel primo codice: tolto session register, messo path, ecc...
    Nel secondo codice: non serve fare controlli sul $_POST, poichè mando una query con quella variabile.

    EDIT TROPPO IMPORTANTE: Funziona *-*
    Il path, quel cavolo di path ha reso tutto funzionante.
    Stima, molta stima per dreadnaut
    Ultima modifica di netpost : 18-04-2011 alle ore 15.44.49

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •