• User Attivo

    Login: Cookie e Sessioni

    'ngiorno a tutti 😄 😄 😄
    Prima di postare su altri forum provo qui (tiè! 😄 ) il mio piccolo grande problema.

    Per far loggare gli utenti sul sito uso il sistema automatico di Dreamweaver poichè le sessioni non sono proprio il mio forte, anzi.
    Il problema è che le sessioni sono un casino, i miei users possono stare online anche un paio d'orette e la sessione ad un certo punto, vuoi per un motivo o per l'altro, scade.

    Vorrei quindi implementare un cookie permanente ma ahimè anche qui ho un pò di pecche. Sulla scrittura del Cookie qualche cosina ina ina la so, sulla lettura un pò di meno.

    Questo è lo script di login di DW

    <?php

    // *** Validate request to login to this site.
    session_start();

    $loginFormAction = $_SERVER['PHP_SELF'];
    if (isset($accesscheck)) {
    $GLOBALS['PrevUrl'] = $accesscheck;
    session_register('PrevUrl');
    }

    if (isset($_POST['nick'])) {
    $loginUsername=$_POST['nick'];
    $password=$_POST['password'];
    $MM_fldUserAuthorization = "/profilo.php";
    $MM_redirectLoginSuccess = "/profilo.php";
    $MM_redirectLoginFailed = "/login/fallito.php";
    $MM_redirecttoReferrer = true;
    mysql_select_db($database_giochi, $giochi);

    $LoginRS__query=sprintf("SELECT nick, password FROM mp_login WHERE nick='%s' AND password='%s' AND status='a'",
    get_magic_quotes_gpc() ? $loginUsername : addslashes($loginUsername), get_magic_quotes_gpc() ? $password : addslashes($password));

    $LoginRS = mysql_query($LoginRS__query, $giochi) or die(mysql_error());
    $loginFoundUser = mysql_num_rows($LoginRS);
    if ($loginFoundUser) {
    $loginStrGroup = "";

    //declare two session variables and assign them
    $GLOBALS['MM_Username'] = $loginUsername;
    $GLOBALS['MM_UserGroup'] = $loginStrGroup;	      
    
    //register the session variables
    session_register("MM_Username");
    session_register("MM_UserGroup");
    
    if (isset($_SESSION['PrevUrl']) && true) {
      $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];	
    }
    header("Location: " . $MM_redirectLoginSuccess );
    

    }
    else {
    header("Location: ". $MM_redirectLoginFailed );
    }
    }
    ?>


    A vostro parere è troppo complicato metterci in mezzo un Cookie?
    Oppure esiste qualche script semplice da implementare per fare questo?

    Grazie per le eventuali dritte.


  • Super User

    @Bukowski said:

    'ngiorno a tutti 😄 😄 😄
    Prima di postare su altri forum provo qui (tiè! 😄 ) il mio piccolo grande problema.

    Per far loggare gli utenti sul sito uso il sistema automatico di Dreamweaver poichè le sessioni non sono proprio il mio forte, anzi.
    Il problema è che le sessioni sono un casino, i miei users possono stare online anche un paio d'orette e la sessione ad un certo punto, vuoi per un motivo o per l'altro, scade.

    Vorrei quindi implementare un cookie permanente ma ahimè anche qui ho un pò di pecche. Sulla scrittura del Cookie qualche cosina ina ina la so, sulla lettura un pò di meno.

    Questo è lo script di login di DW

    <?php

    // *** Validate request to login to this site.
    session_start();

    $loginFormAction = $_SERVER['PHP_SELF'];
    if (isset($accesscheck)) {
    $GLOBALS['PrevUrl'] = $accesscheck;
    session_register('PrevUrl');
    }

    if (isset($_POST['nick'])) {
    $loginUsername=$_POST['nick'];
    $password=$_POST['password'];
    $MM_fldUserAuthorization = "/profilo.php";
    $MM_redirectLoginSuccess = "/profilo.php";
    $MM_redirectLoginFailed = "/login/fallito.php";
    $MM_redirecttoReferrer = true;
    mysql_select_db($database_giochi, $giochi);

    $LoginRS__query=sprintf("SELECT nick, password FROM mp_login WHERE nick='%s' AND password='%s' AND status='a'",
    get_magic_quotes_gpc() ? $loginUsername : addslashes($loginUsername), get_magic_quotes_gpc() ? $password : addslashes($password));

    $LoginRS = mysql_query($LoginRS__query, $giochi) or die(mysql_error());
    $loginFoundUser = mysql_num_rows($LoginRS);
    if ($loginFoundUser) {
    $loginStrGroup = "";

    //declare two session variables and assign them
    $GLOBALS['MM_Username'] = $loginUsername;
    $GLOBALS['MM_UserGroup'] = $loginStrGroup;

    //register the session variables
    session_register("MM_Username");
    session_register("MM_UserGroup");

    if (isset($_SESSION['PrevUrl']) && true) {
    $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];
    }
    header("Location: " . $MM_redirectLoginSuccess );
    }
    else {
    header("Location: ". $MM_redirectLoginFailed );
    }
    }
    ?>


    A vostro parere è troppo complicato metterci in mezzo un Cookie?
    Oppure esiste qualche script semplice da implementare per fare questo?

    Grazie per le eventuali dritte.
    Niente di complicato 😄
    Comunque una sessione o un cookie non può durare per sempre 😄

    Può durare:
    o fino a quando chiude il browser, o per un certo periodo di tempo ( da specificare )

    Se mi permetti, vorrei correggere lo script, che usa funzioni non deprecate, ma comunque sconsigliate per il settaggio delle variabili di sessione:

    session_register('variabile', 'valore') è da sostituire con $_SESSION['variabile'] = 'valore'; come fosse un array di dati.

    poi, questo:

    //declare two session variables and assign them
    $GLOBALS['MM_Username'] = $loginUsername;
    $GLOBALS['MM_UserGroup'] = $loginStrGroup;

    //register the session variables
    session_register("MM_Username");
    session_register("MM_UserGroup");
    

    si deve sostituire con:

    $_SESSION['MM_Username'] = $loginUsername;
    $_SESSION['MM_UserGroup'] = $loginStrGroup;

    per allungare la durata della sessione devi usare questa funzione:
    session_set_cookie_params ( int lifetime [, string path [, string domain]] )

    che varia le impostazioni del cookie di sessione. Quindi, dopo session_start(), metti:

    session_set_cookie_params ( $vita_del_cookie )

    e $vita_del_cookie è la durata del cookie di sessione, e dei suoi parametri ci interessa il primo, ovvero la sua aspirazione. Puoi usare uno di questi valori che ti suggerisco:

    $vita_del_cookie = time()+3600; // Per durare un'ora
    $vita_del_cookie = time()+(36002); // Per durare 2 ore
    $vita_del_cookie = time()+(3600
    3); // Per durare 3 ore
    $vita_del_cookie = time()+(36004); // Per durare 4 ore
    $vita_del_cookie = time()+(3600
    5); // Per durare 5 ore
    $vita_del_cookie = time()+(3600*6); // Per durare 6 ore
    ... e via discorrendo. Spero di esserti stato utile 😄


  • User Attivo

    che dire .. grazie dell'aiuto e delle delucidazioni.

    Diciamo che aldilà delle correzioni da te suggerite, ho già usato al tempo il session_set_cookie_params senza grandissimo successo 😞 e non chiedermi perchè, tanto che ho dovuto alzare la durata delle sessioni direttamente sul server (portandola a 3 ore).

    Consideriamo che i miei utenti possono stare su una stessa pagina per ore senza mai refresharla e quindi essere considerati "die" dalla sessione.

    Per questo stavo pensando ad una soluzione di cookie fisico, proprio per scrollarmi di dosso tutti i piccoli problemi che le sessioni possono crearmi, considerando il fatto che io e le sessioni siamo come Berlusconi è alla giustizia 😄 😄 😄

    Tra le tante cose vorrei distribuire il traffico di questo mio sito in 2 server, quindi la gestione delle sessioni diverrebbe molto difficoltosa.

    Che ne pensi?
    Grazie mille


  • Super User

    ma che ci fanno i tuoi utenti tre ore su una pagina???? 😄 😄 😄

    ...ammazza che durata.... :sbav:

    :ciauz:


  • User Attivo

    Ragazzi grazie di tutto.

    Ho risolto ricostruendomi il tutto con i Cookie ... mi sono venute fuori 4 righe di codice 😮 .. non saranno il massimo però aho 😄 ... funziona che è un piacere.

    Grazie PAter 😉


  • Super User

    occhio che non tutti abilitano i cookie e quindi le tue sessioni vanno a quel paese.

    se decidi di sistemare il tutto puoi usare le session e passare l'id di sessione sulla query string a questo punto eviti ogni problema di impostazioni


  • User Attivo

    @Tymba said:

    occhio che non tutti abilitano i cookie e quindi le tue sessioni vanno a quel paese.

    se decidi di sistemare il tutto puoi usare le session e passare l'id di sessione sulla query string a questo punto eviti ogni problema di impostazioni

    Lo so ma attiveranno i cookie.

    Le sessioni non posso usarle poichè il sito è su 2 server diversi... quindi mentre navighi può essere che vedi una pagina in uno, la seconda nell'altro .. e via dicendo.


  • Super User

    certo che anche tu te la complichi bene la vita 😮 😮


  • User Attivo

    @Tymba said:

    certo che anche tu te la complichi bene la vita 😮 😮

    Magari riuscissi a fare tutto su 1 🙂
    Ma il traffico è alto e sono costretto a distribuirlo su piu server.

    Grazie per il supporto 🙂


  • User Newbie

    @PaTeR said:

    Niente di complicato 😄
    Comunque una sessione o un cookie non può durare per sempre 😄

    Può durare:
    o fino a quando chiude il browser, o per un certo periodo di tempo ( da specificare )

    Se mi permetti, vorrei correggere lo script, che usa funzioni non deprecate, ma comunque sconsigliate per il settaggio delle variabili di sessione:

    session_register('variabile', 'valore') è da sostituire con $_SESSION['variabile'] = 'valore'; come fosse un array di dati.

    poi, questo:

    //declare two session variables and assign them
    $GLOBALS['MM_Username'] = $loginUsername;
    $GLOBALS['MM_UserGroup'] = $loginStrGroup;

    //register the session variables
    session_register("MM_Username");
    session_register("MM_UserGroup");
    

    si deve sostituire con:

    $_SESSION['MM_Username'] = $loginUsername;
    $_SESSION['MM_UserGroup'] = $loginStrGroup;

    per allungare la durata della sessione devi usare questa funzione:
    session_set_cookie_params ( int lifetime [, string path [, string domain]] )

    che varia le impostazioni del cookie di sessione. Quindi, dopo session_start(), metti:

    session_set_cookie_params ( $vita_del_cookie )

    e $vita_del_cookie è la durata del cookie di sessione, e dei suoi parametri ci interessa il primo, ovvero la sua aspirazione. Puoi usare uno di questi valori che ti suggerisco:

    $vita_del_cookie = time()+3600; // Per durare un'ora
    $vita_del_cookie = time()+(36002); // Per durare 2 ore
    $vita_del_cookie = time()+(3600
    3); // Per durare 3 ore
    $vita_del_cookie = time()+(36004); // Per durare 4 ore
    $vita_del_cookie = time()+(3600
    5); // Per durare 5 ore
    $vita_del_cookie = time()+(3600*6); // Per durare 6 ore
    ... e via discorrendo. Spero di esserti stato utile 😄

    ciao scusa ma per fare in modo che dopo un login un utente anche se chiude il browser o spegne il pc, al successivo riavvio quando clicca sulla pagina riservata entri automaticamente un pò come succede nei forum dove spuntando l'opzione ricordami rimane fino a chè non si cancellano i cookie e le sessioni autenticate dal browser. Hai capito cosa voglio dire ? 🙂


  • Super User

    ... Hai capito cosa voglio dire ? imageA chi lo stai chiedendo SolidSnake4?

    Il post che quoti è di 3 anni fa.


  • User Newbie

    ah non avevo visto la data, lo stavo chiedendo a PaTeR