Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Cookies e Sessioni

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    34

    Cookies e Sessioni

    Salve a tutti, vi spiego subito il mio problema...
    Ho uno script che permettere la creazione di un utente e il login per accedere a pagine private. Nel codice sono state utilizzate solo le sessioni, quindi la sessione scade non appena chiudo il browser.
    Volevo utilizzare i cookies in modo da rimanere loggato anche dopo aver chiuso il browser e qui sorgono i problemi... Ho creato i 3 cookies che mi interessavano:

    Codice PHP:
    $time time()+60*60*24*30;
    setcookie("login"$_SESSION['login'], $time"/");
    setcookie("username"$_SESSION['username'], $time"/");
    setcookie("auth"$_SESSION['auth'], $time"/"); 
    Il problema è che i 3 cookies dovrebbero essere creati dopo la creazione delle 3 sessioni ($_SESSION['login'], $_SESSION['username'] e $_SESSION['auth']), ma non è possibile farlo, perchè dovrebbero trovarsi nell'header... Mettendoli nell'header l'errore:

    Warning: Cannot modify header information - headers already sent by (output started at /home/raccoonc/public_html/inc/foot.php:17)
    sparisce, ma in questo modo non viene assegnato nessun valore, perchè le 3 sessioni vengono dichiarate dopo.

    Come dovrei fare? Grazie per l'aiuto!!!

  2. #2
    in teoria dovrebbe andare...
    l'importante è che prima di setcookie o di una sessione non ci sia un comando che stampa a video... tipo echo o print

  3. #3
    Utente di HTML.it L'avatar di Andy_87
    Registrato dal
    Jun 2010
    Messaggi
    323
    Per evitare quel warning devi usare queste istruzioni:
    [list=1]
    ob_start();
    ob_end_flush();[/list=1]

    Leggiti a cosa servono e come si usano, trovi tutto su php.net
    "Se non riuscirò a piegare gli dei del cielo, smuoverò le potenze dell'inferno"
    S. Freud

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    34
    Non conoscevo queste funzioni, adesso il warning non appare più... ora vedo se funziona tutto.

    Grazie infinite dell'aiuto!!!

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    34
    Ok, funziona tutto alla perfezione, ma avrei ancora un'ultima domanda...

    Per cancellare i cookies al logout, ho inserito queste righe:

    Codice PHP:
    setcookie("login");
    setcookie("username");
    setcookie("auth"); 
    Per evitare di usare le 2 funzioni che mi avete dato, non c'è un modo per eliminare o rendere nulli i cookies? mi pare di aver visto qualcuno usare unset(); ma non mi pare che funzioni.

  6. #6
    Utente di HTML.it L'avatar di Andy_87
    Registrato dal
    Jun 2010
    Messaggi
    323
    unset() si usa per le sessioni e non per i cookie. Prima di usare le istruzioni vai a leggerti cosa fanno e a cosa servono, su php.net c'è tutto. ob_start() serve per bufferizzare l'output e ob_end_flush() serve per mostrare a video quello che è hai bufferizzato. A parte questo, non ho capito perchè dovrebbe uscirti quel warning quando distruggi i cookie. La pagina di logout deve essere così:
    Codice PHP:
    <?php
    setcookie
    ("login"); 
    setcookie("username"); 
    setcookie("auth");
    echo
    "Logout effettuato"//oppure AL POSTO DI questa echo metti un redirect
    ?>
    "Se non riuscirò a piegare gli dei del cielo, smuoverò le potenze dell'inferno"
    S. Freud

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    34
    Questo è il codice:

    Codice PHP:
    session_start();

    include (
    "functions.php");
    include (
    "inc/foot.php");

    // Connessione al database
    include ('inc/config.php');
    Db_connect();

    //Query configurazione
    $queryc "SELECT * from ".$tbl_prefix."config";
    $risultatoc mysql_query($queryc);
    $num_righec mysql_fetch_row($risultatoc);
    $url_login $num_righec[3];

    if (
    $_COOKIE['login'] != "yes"
     
    Errore("$url_login""Errore""Per accedere a questa pagina è prima necessario effettuare il login!" ,".");

    else
    {
    /*******************/
    /*    Logout       */
    /*******************/

    setcookie("login");
    setcookie("username");
    setcookie("auth");

        
    session_destroy();
        
        
    Ok("$url_login""Logout eseguito correttamente""Il logout è stato eseguito con successo!" ,".");


    Come puoi vedere prima di eliminare i 3 cookie, c'è già del codice e quindi non me lo fa fare.

    Per quanto riguarda unset(), so che si usa per le sessioni, ma in un'altra pagina del forum qualcuno aveva provato:

    Codice PHP:
    unset($_COOKIE['login']); 
    e mi era venuto il dubbio. Comunque... usando ob_start(); il problema si risolve, ma volevo sapere se esisteva un metodo più pulito

  8. #8
    Utente di HTML.it L'avatar di Andy_87
    Registrato dal
    Jun 2010
    Messaggi
    323
    ob_start() non è un metodo non pulito, semplicemente non è molto conosciuto ma come vedi è molto utile. Senza questa istruzione avresti dovuto dividere il tuo script in almeno due pagine. Ad ogni modo i miei consigli sono:
    1. Se con ob_start() funziona tutto allora usalo tranquillamente.
    2. Se con ob_start() hai ancora problemi, dividi lo script in più pagine.

    L'istruzione unset() distrugge una variabile e dato che un cookie non è una variabile bensì un vero e proprio file l'istruzione unset non serve a niente, ma per distruggerli bisogna o fare come hai fatto tu, cioè settarli "vuoti" oppure settarli nel passato, cioè
    Codice PHP:
    setcookie ("login"""time() - 3600); 
    "Se non riuscirò a piegare gli dei del cielo, smuoverò le potenze dell'inferno"
    S. Freud

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    34
    Codice PHP:
     setcookie ("login"""time() - 3600); 
    Ho optato per quello più corto :P. Con obstart() non mi da nessunissimo problema (pare).
    Grazie mille per l'aiuto, mi mancavano solo i cookies per completare il sito.

  10. #10
    Utente di HTML.it L'avatar di Andy_87
    Registrato dal
    Jun 2010
    Messaggi
    323
    Perfetto felice di esserti stato utile!
    "Se non riuscirò a piegare gli dei del cielo, smuoverò le potenze dell'inferno"
    S. Freud

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.