[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