Visualizzazione risultati 1 fino 11 di 11

Discussione: Problema nel settaggio di un cookie

  1. #1
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Question Problema nel settaggio di un cookie

    Ciao a tutti, non riesco a capire proprio come si setta un cookie.
    Qui c'è il codice per il login: sono riuscito solo a mettere il checkbox se il cookie non è settato.
    Quindi se il check box è spuntato (if(isset($_FORM['ricorda']))) viene settato il cookie per due settimane (ovvero 336 ore), o almeno finché l'utente non effettuerà il logout.
    Codice PHP:
    <!-- INIZIO CODICE RICONOSCIMENTO (LOGIN) -->
    <?php
    session_start
    ();
    require(
    'templates/reg/connessionedb.php');
    if(!isset(
    $_SESSION['log']))
    {
    $_SESSION['log'] = 0;
    }
    if(!isset(
    $_SESSION['username']))
    {
    $_SESSION['username'] = "anonimo";
    }

    if (
    $_SESSION['log'] != 1)
    {
    if(isset(
    $_POST['pass']) && isset($_POST['user']))
    {
    $qry_pass = mysql_real_escape_string(md5($_POST['pass']));
    $qry_user = mysql_real_escape_string($_POST['user']);
    $query = "SELECT * " .
    "FROM user " .
    "WHERE user_username = '$qry_user' " .
    "AND user_password = '$qry_pass' " .
    "AND user_reg = 1 ";
    $results = mysql_query($query) or die (mysql_error());

    if(
    mysql_num_rows($results) != 0)
    {
    $row = mysql_fetch_array($results);
    $_SESSION['log'] = 1;
    $_SESSION['username'] = $row['user_username'];
    }
    }
    }
    echo
    "Ciao " . $_SESSION['username'] . "!";
    ?>
    <!-- FINE CODICE RICONOSCIMENTO (LOGIN) -->
    <!-- INIZIO CONDIZIONE "SE NON SI È LOGGATI" --></td>
    <?php
    if ($_SESSION['log'] != 1)
    {
    ?>
    <td>
    <a href="Registrazione.php">Registrati</a> o effettua il login:&nbsp;
    </td>
    <td width="500">
    <form name="login" action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" onSubmit="return ver();">
    Username
    <input name="user" type="text" size="15" maxlength="20">
    Password
    <input name="pass" type="password" size="15" maxlength="20">
    <!-- INIZIO FUNZIONE RICORDA -->
    <?php
    if(!isset($_COOKIE['ricorda_login'])) { ?>
    <input name="ricorda" value="1" type="checkbox" title="Ricordami per 2 settimane" /> <?php
    } ?>
    <input type="submit" name="submit" class="button_top" value="Login">
    </form>
    <!-- FINE FUNZIONE RICORDA -->
    <!-- FINE CONDIZIONE "SE NON SI È LOGGATI" -->
    <!-- INIZIO CONDIZIONE ELSE -->
    <?php
    }else {
    ?>
    <td width="700"><form name="logout" action="templates/reg/logout.php" method="post" onSubmit="return ver();">
    <input type="submit" name="submit" class="button_top" value="Logout">
    </form>
    <?php
    }
    ?>
    <!-- FINE CONDIZIONE ELSE -->
    Grazie.
    Ultima modifica di radiodelmomento : 12-06-2011 alle ore 15.53.01

  2. #2
    Guest

    Predefinito

    if(isset($_FORM['ricorda']))) è sbagliato. Dovrebbe essere $_POST['ricorda'], prima di tutto.

    Secondo, vedo che ci sono isset() su username, password ed altro. Ovviamente è sbagliato perché inviando il form i campi di testo saranno settati, quindi dovrai fare la condizioni per vedere se sono vuoti o meno.

    Terzo, non vedo la funzione setcookie() per settare il cookie, cioè il problema di fondo.

    PS: Utilizza un codice più pulito e fai qualche lettura sull'ottimizzazione del codice; mi sono permeso di pulirlo un po'. Se vuoi utilizzalo, altrimenti fa niente.

    Codice PHP:
    <!-- INIZIO CODICE RICONOSCIMENTO (LOGIN) -->
    <?php

    session_start
    ();
    require(
    'templates/reg/connessionedb.php');

    if (!isset(
    $_SESSION['log']))
    {
    $_SESSION['log'] = 0;
    }

    if (!isset(
    $_SESSION['username']))
    {
    $_SESSION['username'] = "anonimo";
    }

    if (!
    $_SESSION['log'])
    {
    if(!!
    $_POST['pass'] && !!$_POST['user'])
    {
    $_POST['pass'] = md5($_POST['pass']);
    $_POST['user'] = mysql_real_escape_string($_POST['user']); # Consiglio di usare anche htmlspecialchars()

    $query = "SELECT *
    FROM user
    WHERE user_username = '
    {$qry_user}'
    AND user_password = '
    {$qry_pass}'
    AND user_reg = 1"
    ;
    $results = mysql_query($query)
    $row = mysql_fetch_array($results);

    if (!
    $results)
    {
    die(
    'Errore nella query: ' . mysql_error());
    }

    if(!!
    $row)
    {
    $_SESSION['log'] = 1;
    $_SESSION['username'] = $row['user_username'];

    # qui devi usare setcookie() SE $_POST['ricorda_login'] è checkato. Guarda su php.net il funzionamento
    }
    }
    }

    echo
    "Ciao {$_SESSION['username']}!";
    ?>

    <!-- FINE CODICE RICONOSCIMENTO (LOGIN) -->
    <!-- INIZIO CONDIZIONE "SE NON SI È LOGGATI" --></td>
    <?php
    if (!$_SESSION['log'])
    {
    ?>
    <td>
    <a href="Registrazione.php">Registrati</a> o effettua il login:&nbsp;
    </td>
    <td width="500">
    <form name="login" action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" onSubmit="return ver();">
    Username
    <input name="user" type="text" size="15" maxlength="20">
    Password
    <input name="pass" type="password" size="15" maxlength="20">
    <!-- INIZIO FUNZIONE RICORDA -->
    <?php
    /*
    Concettualmente sbagliato. Ricorda login serve appunto per ricordare
    il login. Se questo esiste, setti il cookie per mantenere la sessione aperta
    altrimenti non lo setti e la sessione terminerà alla chiusura del browser.
    Ergo, il pulsante deve rimanere sempre.
    */
    if (!isset($_COOKIE['ricorda_login']))
    {
    ?>
    <input name="ricorda" value="1" type="checkbox" title="Ricordami per 2 settimane" />
    <?php
    }
    ?>
    <input type="submit" name="submit" class="button_top" value="Login">
    </form>
    <!-- FINE FUNZIONE RICORDA -->
    <!-- FINE CONDIZIONE "SE NON SI È LOGGATI" -->
    <!-- INIZIO CONDIZIONE ELSE -->
    <?php
    }
    else
    {
    ?>
    <td width="700"><form name="logout" action="templates/reg/logout.php" method="post" onSubmit="return ver();">
    <input type="submit" name="submit" class="button_top" value="Logout">
    </form>
    <?php
    }
    ?>
    <!-- FINE CONDIZIONE ELSE -->

  3. #3
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    Sì scusami mi sono confuso, uso sempre $_POST (anche perché FORM m darebbe errore).
    Poi io volevo sapere proprio come si settava un cookie...
    setcookie("ricorda", $value, time()+1209600);
    Solo che non so cosa devo mettere in $value...
    Grazie mille per il form e i consigli, ciao!
    Ultima modifica di radiodelmomento : 12-06-2011 alle ore 17.10.08

  4. #4
    Guest

    Predefinito

    In $value metterei il valore del cookie da leggere. Di solito si usa un array con serialize() e base64_encode() e dopo si legge con base64_decode() e unserialize(), poi usi le funzioni per trattare un array.

    Ricorda che il cookie è leggibile dall'utente e, se non sbaglio, si può anche modificare.


  5. #5
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    Ciao.
    Quindi dovrei scrivere una cosa del genere:
    Codice PHP:
    $value = base64_encode("abcd");
    setcookie("ricorda", $value, time()+1209600);
    Quindi questo cookie con il nome "ricorda" (ne sceglierò uno più specifico per non confonderlo con altri) rimane nel browser dell'utente per 1209600 secondi, ovvero 2 settimane a partire da adesso (time).
    Ora, come faccio a far ricordare al browser quali sono le credenziali e quindi leggerle e accedere?
    P. S.: nel tuo form c'era qualche errore, alla fine non sono riuscito a risolvere il maggiore: non accede! E se provo ad accedere da un'altra pagina e poi andare al tuo form non si legge niente! Comunque, io vorrei sapere come si setta un cookie...
    Grazie mille per la tua disponibilità.

    EDIT:

    Scusate ma non sono ancora riuscito a settare un cookie. :-(
    Grazie.
    Ultima modifica di alemoppo : 14-06-2011 alle ore 23.17.08 Motivo: Non fare doppi post. Usa il tasto Edita!

  6. #6
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,761

    Predefinito

    Come per la session_start(), anche la setcookie() va a modificare alcuni parametri dell'header della pagina. Quindi, ad esempio il commento:

    Codice HTML:
    <!-- INIZIO CODICE RICONOSCIMENTO (LOGIN) -->
    <?php
    Fa iniziare l'output del corpo della pagina, facendo "chiudere" l'header.
    Puoi verificare questa cosa tramite la headers_sent().

    In generale, comunque, la setCookie() si usa come hai scritto. Occhio a non salvare dati sensibili perché, come detto da biccheddu, sono facilmente visibili (e modificabili).
    Ad esempio, se salvi la password, non salvarla "in chiaro", ma salvane solo l'hash.

    Per la setcookie(), ci sono numerosi esempi anche sulla documentazione (che ti ho linkato).

    Ciao!
    Ultima modifica di alemoppo : 14-06-2011 alle ore 23.19.04

  7. #7
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Question

    Grazie alemoppo, ma non riesco a capire come si setta un cookie... almeno credo di aver seguito tutto alla perfezione, ma nessuno è perfetto...
    Codice PHP:
    if(isset($_POST['ricorda'])){
    echo
    "il cookie dovrebbe essere settato";
    $value = "abcd";
    setcookie("ricorda_login", $value, time()+1209600);
    }
    //altre cose e poi scrivo:
    if(isset($_COOKIE['ricorda_login'])){
    echo
    "cookie settato";
    }else{
    echo
    "cookie non settato";
    }
    E secondo voi che mi dice?
    il cookie dovrebbe essere settato, quindi $_POST['riorda'] è settato, ma poi mi dice cookie non settato, quindi non crea il cookie... cosa sbaglio? :-(
    Grazie.

  8. #8
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,761

    Predefinito

    Quel codice funziona. Ne ho fatto uno molto simile per farti vedere:

    Codice PHP:
    <?php
    if(isset($_POST['ricorda'])) {
    $value = "abcd";
    setcookie("ricorda_login", $value, time()+1209600);
    header('location: ./cookie.php'); #ricarico la pagina per far riinviare i dati header (e quindi i parametri cookie aggiornati)
    }
    if(isset(
    $_POST['dimentica'])) {
    setcookie("ricorda_login", 'inutile', time()-100);
    header('location: ./cookie.php'); #ricarico la pagina per far riinviare i dati header (e quindi i parametri cookie aggiornati)
    }

    if(isset(
    $_COOKIE['ricorda_login'])){
    echo
    "cookie settato";
    }else{
    echo
    "cookie non settato";
    }
    ?>
    <form method="post" action="">
    <input type="hidden" name="ricorda">
    <input type="submit" value='invia'>
    </form>
    <form method="post" action="">
    <input type="hidden" name="dimentica">
    <input type="submit" value='dimentica'>
    </form>
    Lo puoi provare qui: alemoppo.altervista.org/cookie.php

    Ciao!

  9. #9
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    OK, ho eliminato tutto il contenuto della pagina tranne il form e funziona... ma quindi il problema erano i commenti? Come faccio allora a fare una pagina pulita?
    Ciao ciao e grazie ancora.

  10. #10
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,761

    Predefinito

    Cosa intendi per pagina pulita? (per quello che ho inteso:) non produrre html in uscita prima di usare queste funzioni.

    ..Comunque, in realtà esiste anche un modo per controllare questi "flussi": tutte le funzioni del tipo ob_start()... (le altre le trovi nel menù affianco).

    Però, per non complicarsi la vita, è meglio non produrre alcun codice html prima di usare queste funzioni...

    Ciao!

  11. #11
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    OK grazie mille.
    Il cookie funziona, ma adesso come faccio ad integrarlo con il form?
    Al posto di abcd gli dovrei mettere magari l'id criptatissimo dell'utente?
    Ultima cosa: setcookie("ricorda_login", 'inutile', time()-1209600); e unset($_COOKIE['ricorda_login']) sono la stessa cosa?
    Grazie ancora, ciao!
    Ultima modifica di radiodelmomento : 15-06-2011 alle ore 00.37.48

Regole di scrittura

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