cleysinhonv
(usa Ubuntu)
Enviado em 11/04/2012 - 09:25h
Olá Daniel,
Sua ajuda foi extremamente esclarecedora e antes de qualquer comentário agradeço a sua disposição em ajudar a solucionar o meu problema.
O controle da sessão bem como, recuperar dados, e checar se esta vazia ou não esta funcionando perfeitamente. apenas o logout que não consigo entender por que ele não fecha a sessão. Criei uma classe para me ajudar a fazer isso. Se você ainda poder me ajudar a solucionar esse problema agradeço novamente.Os códigos no qual estou fazendo isso.
View - Logout.pl
#!/usr/bin/perl -w
# Using local modules
use lib '/var/www/gsm/model/';
use lib '/var/www/gsm/controller/';
use CGI qw(:standard);
use Layout;
use Mensage;
use CGI::Session;
use SessionController;
# Instancing the modules Objects
my $page = new CGI;
my $layout = new Layout;
# Iniciang Tradution the page
print $page->header(-charset=>'utf-8');
print $page->start_html("Genome System Mining");
# Using methods the Objects
print $layout->header();
my $session = CGI::Session->load() or die CGI::Session->errstr();
if($session->is_expired)
{
$session->header(-location=>'gsm.pl');
}
elsif($session->is_empty)
{
$session->header(-location=>'gsm.pl');
}
else
{
# check login
$out = SessionController::closeSession();
if($out eq 'Ok')
{
$page->redirect(-url=>'gsm.pl');
}
else
{
$session->header(-location=>'index.pl');
}
}
# Header of cadaster
print '<center><H2><br>';
print 'Mensage';
print '</center></H2>';
# Show rodapé
print $layout->lower();
# Finalize page
print $page->end_html;
=======================================================================================
Controller -> package ::SessionController;
package ::SessionController;
# Using local modules
use lib '/var/www/gsm/model/';
use Sessao;
use Connect;
my $dbh = Connect::db;
# Method for valid user
sub loginValid
{
my $emailform = shift;
my $passwordform = shift;
if(@_)
{
my $emailform = $_[0];
my $passwordform = $_[1];
}
# Data compare the form
my $sql = "SELECT iduser,name,email,password,level,status
FROM user WHERE email='$emailform'
AND password='$passwordform'";
my $query = $dbh->prepare($sql);
$query->execute();
@result = $query->fetchrow_array();
if($passwordform eq "$result[3]" && $result[5] != 0)
{
$out = Sessao::StarSession($result[0],$result[1],$result[2],$result[4]);
return $out;
}
else
{
return 'False';
}
}
sub checkSession
{
@out = Sessao::valid();
return @out;
}
#Fechar a sessão
sub closeSession
{
$out = Sessao::DelSession;
return $out;
}
$rc = $dbh->disconnect;
return 1;
=============================================================================================
Model -> package ::Sessao;
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];
}
my $cgi = new CGI;
my $session = new CGI::Session(undef, undef, {Directory=>"/tmp"});
$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('+30m');
$session->flush();
return 'Ok';
}
# Abre uma sessão existente e coleta dados da sessão
sub valid
{
my $session = new CGI::Session(undef, undef, {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
{
my $session = CGI::Session->load();
$session->delete();
$session->flush();
return 'Ok';
}
return 1