Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Problema CGI::SESSION

  1. #1

    Problema CGI::SESSION

    Caio a tutti ragazzi, sto creando una pagina di log_in e da questa devo fare in modo che se esiste l'utente nel DB, apro una sessione per lui, in caso contrario lo faccio registrare.

    Girando per la rete ho trovato una parte di script di esempio di utilizzo delle CGI::SESSION, ho anche seguito un tutorial e devo dire che funzionano, ma non sono sicuro che sia giusto così, ed inoltre non riesco a tirare fuori i dati dalla sessione.

    Il package Sessioni_CGI::Sessioni l'ho creato io perchè devo aprire una sessione per ogni utente ed anche perchè mi piacerebbe in un futuro separarlo dal main e richiamarlo come programma esterno (ma questa è un altra storia).

    Il mio script si presenta così:

    {
    package Sessioni_CGI::Sessioni;
    use strict;
    use warnings;
    use CGI;
    use CGI::Session;

    sub SetLogIn {
    my $User_id= shift;
    my $Username= shift;
    my $Password= shift;
    my $Nome= shift;
    my $Cognome= shift;
    my $Email= shift;
    #print "$User_id, $Username, $Password, $Nome, $Cognome, $Email";
    my $session = new CGI::Session("driver:File", undef, {Directory=>'/tmp'});

    # getting the effective session id:
    my $CGISESSID = $session->id();

    # storing data in the session

    $session->param('User_id', $User_id);
    $session->param('Username', $Username);
    $session->param('Password', $Password);
    $session->param('Nome', $Nome);
    $session->param('Cognome', $Cognome);
    $session->param('Email', $Email);
    $session->flush();
    # clearing a certain session parameter
    $session->clear(["_IS_LOGGED_IN"]);
    # prova ad utilizzare il campo email
    my $email = $session->param('Email');
    print "email: $email";

    # expire '_IS_LOGGED_IN' flag after 10 idle minutes:
    $session->expire(_IS_LOGGED_IN => '+10m');

    # expire the session itself after 1 idle hour
    $session->expire('+1h');

    # delete the session for good
    $session->delete();

    }


    }







    #recupero dati dal form
    my $ut_username=$cgi->param('username');
    my $ut_password=$cgi->param('password');

    # se ci sono i dati faccio la select e controllo così che ci sia l' utente nel DB
    if($ut_username && $ut_password){
    my $sql = "SELECT Utente.Id, Utente.Username, Utente.Password, Utente.Nome, Utente.Cognome, Utente.Email
    FROM Utente
    WHERE Username = '$ut_username' AND Password = '$ut_password'
    ";
    my $sth = $dbh->prepare($sql);
    $sth->execute or die "SQL Error: $DBI::errstr\n";
    my $numRows = $sth->rows;
    # se il NUm_rows è > di 1 significa che è presente e quindi procedo con la creazione della sessione
    if ($numRows != 0){
    my @Array_Utente_Info=$sth->fetchrow_array; #gli passo un array contenente il risultato della query
    Sessioni_CGI::Sessioni::SetLogIn(@Array_Utente_Inf o);# richiamo la funzione passandogli un array di dati
    #print @Array_Utente_Info;



    }else {

    print "chi sei?";

    }

    #
    #DA QUI IN POI DOVREI UTILIZZARE LE VARIABILI DI SESSIONE MA COME ????????
    #

    Le mie domande sono:

    - è qiusto cancellare subito una sessione subito dopo averla creata?? i dati non credo che rimangano, ma se tolgo il $session->delete(); si aprono più sessioni per uno stesso utente

    -perchè non riesco ad accedere ai dati della sessione all'esterno della mia funzione?? sò che con my dichiaro una variabile locale, ma come in php i dati non vengono memorizzati in array superglobale, oppure (visto che sono memorizzati nel file) non dovrei accedere ai dati della sessione da qualunque punto del mio programma??


    Ho le idee un pò confuse!!!

    Grazie a tutti per l'aiuto.

  2. #2
    Le mie domande sono: - è qiusto cancellare subito una sessione subito dopo averla creata?? i dati non credo che rimangano, ma se tolgo il $session->delete(); si aprono più sessioni per uno stesso utente
    Se la cancelli perdi i dati di sessione. Per evitare la creazione di più sessioni per lo stesso utente contemporanee è sufficiente che controlli l'esistenza di una sessione identificata tramite il cookie di sessione, se esiste utilizzi la stessa, altrimenti ne apri un'altra.
    -perchè non riesco ad accedere ai dati della sessione all'esterno della mia funzione?? sò che con my dichiaro una variabile locale, ma come in php i dati non vengono memorizzati in array superglobale, oppure (visto che sono memorizzati nel file) non dovrei accedere ai dati della sessione da qualunque punto del mio programma??
    non ho capito bene cosa vuoi dire. In Perl se usi "use strict" e "my" non puoi vedere le variabili all'esterno del blocco (nono solo della funzione) in cui stanno e devi usare meccanismi di esportazione.
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

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.