[Rio-pm] Como recuperar dados de uma sessão que já foi iniciada

Cleysinho cleysinhonv em gmail.com
Terça Abril 10 11:15:06 PDT 2012


Inicialmente esta com dúvidas em como gerenciar sessão. Confesso que as
vezes que trabalhei com PHP achei um pouco mais fácil. Mas acabei tirando o
feriado para estudar. Por hora consigo gerenciar bem a sessão a única coisa
que não estou conseguindo fazer é fechar a sessão. Gostaria que alguém
pudesse me orientar como posso fazer isso da forma correta. O criei um
método para me auxiliar, porém ele continua com a sessão aberta.

Estou usando esse método para fechar a sessão mas algo está errado
sub DelSession
{
    $cgi    = new CGI;
    $session = new CGI::Session("driver:File", $cgi, {Directory=>"/tmp"});
    $session->delete();
    $cgi->delete();
    return 'Ok';
}


Aqui esta a classe que criei para tentar "abstrair"
package ::Sessao;

# Módulo responsável por fazer controle de sessão
use CGI;
use CGI::Session;

# Método pata iniciar uma sessão
sub StarSession
{
    my $id   =shift;
    my $name =shift;
    my $email=shift;
    my $level=shift;

    if(@_)
    {
        $id{id}     =$_[0];
        $name{name}  =$_[1];
        $email{email}=$_[2];
        $level{level}=$_[3];
    }

    $cgi    = new CGI;
    $session = new CGI::Session("driver:File", undef, {Directory=>"/tmp"});

    # Send data in the Session
    $CGISESSID = $session->id();

    $cookie = $cgi->cookie(CGISESSID => $session->id);
    print $cgi->header(-cookie=>$cookie);

    $session->param(-name=>'iduser',-value=>"$id");
    $session->param(-name=>'name'  ,-value=>"$name");
    $session->param(-name=>'email' ,-value=>"$email");
    $session->param(-name=>'level' ,-value=>"$level");

    $session->expire('+1m');
    $session->flush();

    return 'Ok';
}

# Abre uma sessão existente e coleta dados da sessão
sub valid
{
    $cgi    = new CGI;
    $session = new CGI::Session("driver:File", $cgi, {Directory=>"/tmp"});
    if($session->param('iduser') ne '' && $session->param('name'))
    {
        @dados=();
        push (@dados,$session->param('iduser'));
        push (@dados,$session->param('name'));
        push (@dados,$session->param('email'));
        push (@dados,$session->param('level'));
        push (@dados,'Ok');
        return @dados;
    }
    else
    {
        @dados=();
        push (@dados,'False');
        return @dados;
    }
}

# Abre uma sessão existente e fecha
sub DelSession
{
    $cgi    = new CGI;
    $session = new CGI::Session("driver:File", $cgi, {Directory=>"/tmp"});
    $session->delete();
    $cgi->delete();
    return 'Ok';
}
return 1

2012/3/31 Ole Peter Smith <ole.ufg em gmail.com>

>
>
> 2012/3/30 Cleysinho <cleysinhonv em gmail.com>
>
>> Olá Randal,
>>
>> Bom tentei fazer dessa forma e com esse método ate funciona ele consegue
>> recuperar os dados da sessão, mas não por muito tempo.
>>
>> Na verdade eu preciso inicialmente em cada arquivo preciso verificar se a
>> sessão está vazia(is_empty) ou se ela não está expirada (is_expired),
>> porém todas as veses ele está retornando como sessão vazia.
>>
>> Em cada arquivo que monta uma página eu preciso fazer o seguinte:
>>     if($session->is_expired)
>>     {
>>           $page->redirect(url=>gsm.pl)
>>     }
>>     elsif($session->is_empty)
>>     {
>>           $page->redirect(url=>gsm.pl)
>>
>>     }
>>     else
>>     {
>>
>>          Pegar os dados na sessão:
>>
>>         push (@dados,$session->param('iduser'));
>>          push (@dados,$session->param('name'));
>>         push (@dados,$session->param('email'));
>>         push (@dados,$session->param('level'));
>>     }
>>     print $layout->menu();
>>
>> Obs.: Como pegar dados em uma sessão que está vazia?]
>>
>
> Save it somewhere? Database, file, somewhere...
>
> 0le
>
>>
>>
>> Em 30 de março de 2012 14:37, Randal L. Schwartz <merlyn em stonehenge.com>escreveu:
>>
>>  >>>>> "Cleysinho" == Cleysinho  <cleysinhonv em gmail.com> writes:
>>>
>>> Cleysinho>     if($session->param('iduser') ne '' &&
>>> $session->param('name'))
>>> Cleysinho>     {
>>> Cleysinho>         @dados=();
>>> Cleysinho>         push (@dados,$session->param('iduser'));
>>> Cleysinho>         push (@dados,$session->param('name'));
>>> Cleysinho>         push (@dados,$session->param('email'));
>>> Cleysinho>         push (@dados,$session->param('level'));
>>> Cleysinho>         push (@dados,'Ok');
>>> Cleysinho>         return @dados;
>>>
>>>                   return map($session->param($_), qw(iduser name email
>>>                   level)), 'Ok';
>>>
>>> Cleysinho>     }
>>> Cleysinho>     else
>>> Cleysinho>     {
>>> Cleysinho>         @dados=();
>>> Cleysinho>         push (@dados,'False');
>>> Cleysinho>         return @dados;
>>>
>>>                   return 'False';
>>>
>>> Cleysinho>     }
>>> Cleysinho> }
>>>
>>>
>>> --
>>> Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777
>>> 0095
>>> <merlyn em stonehenge.com> <URL:http://www.stonehenge.com/merlyn/>
>>> Smalltalk/Perl/Unix consulting, Technical writing, Comedy, etc. etc.
>>> See http://methodsandmessages.posterous.com/ for Smalltalk discussion
>>>
>>
>>
>>
>> --
>> **
>>  .: Inteligência Coletiva :.
>> Uma inteligência distribuída por toda parte: tal é o nosso axioma
>> inicial. Ninguém sabe tudo, todos sabem alguma coisa, todo o saber está na
>> humanidade’. (Pierre Lévy)
>> www.bioinfopop.ufv.br
>>
>>
>> _______________________________________________
>> Rio-pm mailing list
>> Rio-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/rio-pm
>>
>
>
>
> --
>                                             /////
>                                          ( O O )
> =================oOO==(_)==OOo=================
>             Every day and every hour, I'm Learning more
>           The more I Learn, the less I Know about before
>          The Less I know, the more I want to Look around
>              Diggin' deeper into Higher Ground...  UB40
>                                    .oooO Oooo.
> ==================(     )=(     )=====================
>                                      \  (     )  /
>                                       \_)   (_/
> ===============================================
>                         Ole Peter Smith, IME, UFG
>     http://www.mat.ufg.br/docentes/olepeter - ole at mat.ufg.br
> ===============================================
>                    Life sure is a Mystery to be Lived
>                       Not a Problem to be Solved
> ===============================================
>
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>



-- 
**
.: Inteligência Coletiva :.
Uma inteligência distribuída por toda parte: tal é o nosso axioma inicial.
Ninguém sabe tudo, todos sabem alguma coisa, todo o saber está na
humanidade’. (Pierre Lévy)
www.bioinfopop.ufv.br
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20120410/2af1ca88/attachment-0001.html>


Mais detalhes sobre a lista de discussão Rio-pm