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)











