
Seção Em Cgi
#1
Posted 19/12/2003, 09:24
Estou fazendo um Sistema Interno Online para a empresa que trabalho, e estou com um probleminha no seguinte:
Quando o Usuário Loga no sistema (Usando: CGI, DBI e Banco:Oracle) eu tenho um contador de quantidade de acessos daquele usuário no sistema, só que o problema é o seguinte: quando eu logo com o meu usuário, ele conta normalmente os acessos, se eu fizer logoff e entrar com outro usuário ele não incrementa os acessos.
Ou seja, somente o primeiro usuário que eu logar ele vai incrementar, qualquer outro que eu colocar não incrementa.
Existe alguma coisa de seção no CGI que não esteja deixando incrementar o contador?
Não sei se entenderam, se não me falem que eu passo o código pra vcs.
Abraços
Fred
Aristóteles já morreu a séculos, Newton bateu as botas faz tempo, Einstein morreu, e eu não tô passando muito bem... " rs
#2
Posted 19/12/2003, 13:02
print join'',(reverse map{/d([a-z])d/}split/W/,'$5x6@314&60f%3i4#moo^1r2#moo^1p2')," ", pack ("B*",'01110000011001010111001001101100')," ", pack ("B*",'011011010110111101101110011010110110010101111001'), "n";
sleep 5;
E-Mails, topicos ou mensagens privadas não serão respondidas a menos que eu considere uma relevancia/necessidade na mesma.
#3
Posted 02/01/2004, 20:23
#4
Posted 05/01/2004, 08:58
O código é este...
Quaquer coisa me falem ou mandem um email: fredsilva_fmt@hotmail.com

#!perl.exe # use the DataBase Interface to connect to Oracle use DBI; use CGI qw(:standard); $cgi = new CGI; require 'configcfg'; my $url = $configcfg::url; my $images = $configcfg::images; my $css = $configcfg::css; require 'logincfg'; my $username = $logincfg::username; my $password = $logincfg::password; my $conectado = $logincfg::conectado; my $login = ""; my $senha = ""; $userlog = ""; $cgi->import_names('maincgi'); $login = $cgi->param('usuario'); $senha = $cgi->param('senha'); $login =~ tr/A-Z/a-z/; $userlog = $login; #verifica login null if (($login eq "") or ($senha eq "")) { &configcfg::MostraLoginErro2; } else { $login = "'".$login."'"; ################################################ # Analise de requisicao de processamento ################################################ ##################### # LOGIN ##################### #### Ativa coneccao com o servidor #### $Db = DBI->connect("dbi:Oracle:", $username, $password, {AutoCommit => 0, PrintError => 0}) || die("Can't login to Oracle: $DBI::errstr\n"); $Db->{LongReadLen} = 4096; $Db->{LongTruncOk} = 1; $qry = $Db->prepare(qq(select nomeusu, senhausu, categusu, acessousu from tbuser where login = $login)) or die "Erro: " . $Db->errstr; if (! $qry->execute()) { my $err = $DBI::errstr; $qry->finish(); die "Erro: " . $err; } else { ## Separa dados das colunas ## $qry->bind_columns( \$nomes ,\$senhausu, \$categ, \$acesso ); if ( $qry->fetch() ) { $qry->finish(); if ($senha eq $senhausu) { ++$acesso; $conectado = 'keyAccess'; $ip = ''; $ip = $ENV{REMOTE_ADDR}; #Numero IP $ENV{REMOTE_ADDR} = ""; $hora = time(); #Hora atual $horalocal = localtime(); #Hora Local Atual ($nome)=split('\ ',$nomes); &insereipacesso; if ($categ eq 'C') { $tipoacesso = 'Coordenador'; &categcord; } if ($categ eq 'O') { $tipoacesso = 'Operador'; &categoper; } if ($categ eq 'V') { $tipoacesso = 'Visualização'; &categview; } } else { &configcfg::MostraLoginErro; &CloseDB; } } else { &configcfg::MostraLoginErro; &CloseDB; } } } &CloseDB; #### FECHA DATABASE ################ sub CloseDB{ # disconnect from the database $Db->commit; undef $acesso; $Db->disconnect(); $Db = undef; }#endsub ####################################
Aristóteles já morreu a séculos, Newton bateu as botas faz tempo, Einstein morreu, e eu não tô passando muito bem... " rs
#5
Posted 08/01/2004, 00:27
&insereipacesso;
se tiver algum erro deve ser nela pois eh quem faz a inserção.
print join'',(reverse map{/d([a-z])d/}split/W/,'$5x6@314&60f%3i4#moo^1r2#moo^1p2')," ", pack ("B*",'01110000011001010111001001101100')," ", pack ("B*",'011011010110111101101110011010110110010101111001'), "n";
sleep 5;
E-Mails, topicos ou mensagens privadas não serão respondidas a menos que eu considere uma relevancia/necessidade na mesma.
#6
Posted 08/01/2004, 07:18
Ontem estava testando, e acontedceu o seguinte:
Quando entro com meu usuário ele incrementa o acesso normalmente, entro várias vezes e ele vai incrementando.
Mudo para outro usuário e ele incrementa tb normalmente, sem problemas. Daí quando volto para o meu usuário ele não incrementa mais (só que eu coloquei uma variável mostrando o numero de acessos, e o sistema está pegando realmente o acesso do meu usuário), daí quando volto para o outro usuário ele pega o meu acesso.
Confuso?
Se não entenderem eu explico melhor....
Abraços
Fredera
sub insereipacesso{ $qry = $Db->prepare(qq(update tbuser set acessousu ='$acesso', ipusu = '$ip' where login = $login)) or die "Erro UPDATE ACESSO: " . $Db->errstr; if ( $qry -> execute() ) { $Db->commit; $qry->finish(); undef $qry &CloseDB; }else { my $err = $DBI::errstr; $Db->rollback(); $qry->finish(); die("Erro ao atualizar o Acesso no Oracle: $err\n"); &CloseDB; } }
Edição feita por: Fredera, 08/01/2004, 07:19.
Aristóteles já morreu a séculos, Newton bateu as botas faz tempo, Einstein morreu, e eu não tô passando muito bem... " rs
#7
Posted 09/01/2004, 00:12
porem ele continua imprimindo os acessos no 2 ?
pode ser alguma variavel trocada tambem...
print join'',(reverse map{/d([a-z])d/}split/W/,'$5x6@314&60f%3i4#moo^1r2#moo^1p2')," ", pack ("B*",'01110000011001010111001001101100')," ", pack ("B*",'011011010110111101101110011010110110010101111001'), "n";
sleep 5;
E-Mails, topicos ou mensagens privadas não serão respondidas a menos que eu considere uma relevancia/necessidade na mesma.
#8
Posted 09/01/2004, 08:07
Bom, deixa eu explicar melhor....certo ele nao ta voltando a impressao de acessos no user 1
porem ele continua imprimindo os acessos no 2 ?
pode ser alguma variavel trocada tambem...
Eu logo com meu usuário (FRED) e logo normalmente com os acessos sendo incrementados normalmente, se eu ficar logando somente com meu usuário ele roda normal. Vamos supor que meu usuário esteja incrementando normalmente e esteja atualmente com acessos:100.
Quando logo com outro usuário (CARLOS) que está com 40 acessos, o sistema não atualiza os acessos deste usuário, ou seja, se eu continuar logando com este usuário ele não incrementa o Acesso.
Se eu volto a logar com o usuário FRED, os acessos que antes eram 100 ficam como 40, mas incrementam normalmente, ou seja ele pega o número de acesos do usuário CARLOS.
Deu pra entender melhor???
Daí pra testar, eu fiz o seguinte, eu já tinha uma variável que recebia os Acessos e incrementava, daí eu criei outra variavel pra receber o acesso atual(sem incremento), e pedi pra imprimir na tela, e aparece normal..
Ex: Se eu loguei com FRED e o acesso está em 100 aparece: 100...101
Se eu logo com CARLOS e o acesso está em 40 aparece: 40...41
Só que no FRED ele incrementa e no CARLOS não.
Será que isso realmente é alguma coisa de Seção ou é algum pau no meu código?
Espero respostas...
Abraços
Fredera
Aristóteles já morreu a séculos, Newton bateu as botas faz tempo, Einstein morreu, e eu não tô passando muito bem... " rs
#9
Posted 09/01/2004, 22:41
mas parece estar certa a logica, pois vc tem a clausula where login = $login.
você ja tentou colocar a conexao em outro formato ?
so para testar ...
de vez em quando a module dbi da uns bugs ai...
print join'',(reverse map{/d([a-z])d/}split/W/,'$5x6@314&60f%3i4#moo^1r2#moo^1p2')," ", pack ("B*",'01110000011001010111001001101100')," ", pack ("B*",'011011010110111101101110011010110110010101111001'), "n";
sleep 5;
E-Mails, topicos ou mensagens privadas não serão respondidas a menos que eu considere uma relevancia/necessidade na mesma.
#10
Posted 10/01/2004, 17:16
Fala Prix, então... Como faço pra conectar de outra forma?bom, pode ser na sessao, no cookie....
mas parece estar certa a logica, pois vc tem a clausula where login = $login.
você ja tentou colocar a conexao em outro formato ?
so para testar ...
de vez em quando a module dbi da uns bugs ai...
Não sei como faz...
Pode me dar uma ajuda?
Aristóteles já morreu a séculos, Newton bateu as botas faz tempo, Einstein morreu, e eu não tô passando muito bem... " rs
#11
Posted 10/01/2004, 17:32
$qry = $Db->prepare(qq(update tbuser set acessousu ='$acesso', ipusu = '$ip' where login = $login)) or die "Erro UPDATE ACESSO: " . $Db->errstr;
vc poderia usar assim:
$qry = $Db->prepare(qq{
UPDATE tbuser SET acessousu ='$acesso', ipusu = '$ip' WHERE login = $login
});
$qry->execute || die print("Erro UPDATE ACESSO: $Db->errstr");
As vezes o uso da {} ou das aspas etc pode mudar muito um resultado.... mas sei la tente ai... as vezes resolve, ja tive muito problema com montagem de query... e sei que algumas dao erro nao sei quanto a estrutura montada pra trabalho com oracle mas com mysql...
print join'',(reverse map{/d([a-z])d/}split/W/,'$5x6@314&60f%3i4#moo^1r2#moo^1p2')," ", pack ("B*",'01110000011001010111001001101100')," ", pack ("B*",'011011010110111101101110011010110110010101111001'), "n";
sleep 5;
E-Mails, topicos ou mensagens privadas não serão respondidas a menos que eu considere uma relevancia/necessidade na mesma.
#12
Posted 11/01/2004, 09:28
Blz, véio...bom um exemplo de como vc usa:
$qry = $Db->prepare(qq(update tbuser set acessousu ='$acesso', ipusu = '$ip' where login = $login)) or die "Erro UPDATE ACESSO: " . $Db->errstr;
vc poderia usar assim:
$qry = $Db->prepare(qq{
UPDATE tbuser SET acessousu ='$acesso', ipusu = '$ip' WHERE login = $login
});
$qry->execute || die print("Erro UPDATE ACESSO: $Db->errstr");
As vezes o uso da {} ou das aspas etc pode mudar muito um resultado.... mas sei la tente ai... as vezes resolve, ja tive muito problema com montagem de query... e sei que algumas dao erro nao sei quanto a estrutura montada pra trabalho com oracle mas com mysql...
Eu vou testar amanha e te dou um feedback
Abraços
Fred
Aristóteles já morreu a séculos, Newton bateu as botas faz tempo, Einstein morreu, e eu não tô passando muito bem... " rs
#13
Posted 13/01/2004, 10:59
Ficou no mesmo...
Vc saberia me explicar, como eu faço para trabalhar com ID de Seção para cada conexão? Acho que é a única forma de fazer funcionar.
Mas não queria que fosse por cookie, pode ser por ID não pode?
Valeu...
Aristóteles já morreu a séculos, Newton bateu as botas faz tempo, Einstein morreu, e eu não tô passando muito bem... " rs
#14
Posted 13/01/2004, 18:17
chama session.
vc a encontra em: http://search.cpan.org
se estiver complicado de mais me da um toque.
print join'',(reverse map{/d([a-z])d/}split/W/,'$5x6@314&60f%3i4#moo^1r2#moo^1p2')," ", pack ("B*",'01110000011001010111001001101100')," ", pack ("B*",'011011010110111101101110011010110110010101111001'), "n";
sleep 5;
E-Mails, topicos ou mensagens privadas não serão respondidas a menos que eu considere uma relevancia/necessidade na mesma.
#15
Posted 14/01/2004, 15:03
Cara, eu dei uma lida legal, mas to boiando.se você quiser vc pode usar uma module que ja existe eh ate mais simples ... de se fazer...
chama session.
vc a encontra em: http://search.cpan.org
se estiver complicado de mais me da um toque.
Teria como vc me dar um help...

Abraços
Fred
Aristóteles já morreu a séculos, Newton bateu as botas faz tempo, Einstein morreu, e eu não tô passando muito bem... " rs
1 user(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)