2005-05-13 17:09 @756 |
|
|
 |
kidd
Creador de Perl en Español
|
Registrado: 2003-10-15 16:52 @744 Ubicación: México Mensajes: 1163
|
|
|
|
Hola: Limpié un poco el código: Código: #!/usr/bin/perl -w
use CGI ':standard'; use DBI; #Inicio del DBI use CGI::Session qw/-api3/; #Incio de una Sesion CGI
print header; my $sid = cookie(CGISESSID); #Permite mantener la sesion por medio de la cookie creada my $session = new CGI::Session(undef, $sid, {Directory=>'/tmp'});
my $username = $session->param('username'); #obtiene el parametro de la sesion my $ID = $session->param('ID'); #obtiene el parametro de la sesion
my ($dbh, $sth);
$dbh = DBI->connect('DBI:mysql:Tickets') or die "Couldn't connect to database: " . $DBI->errstr; $sth = $dbh->prepare("SELECT * FROM usuario WHERE username = ? LIMIT 1") or die "Couldn't prepare statement: " . $dbh->errstr; $sth->execute($username); # Ejecuta el query para validar que existe el usuario
my ($nombre,$apellidopat,$apellidomat) = $sth->fetchrow_array();
$sth->finish; $dbh->disconnect;
exit(1);
Lo primero que hice, suponiendo que nada más vas a recibir el registro de un sólo usuario, mejor salvas de una vez los datos en las variables correspondientes cuando haces el fetchrow_array. Lo segundo, es que cuando llamas al nuevo objeto DBI, no estás mandando ni el username ni la contraseña para conectarte al database, no sé si esta permitido conectarse de esta manera a tu database, de lo contrario nunca podrás abrir la conexión. La sintáxis podría ser algo así: Código: my $q_string = "DBI:mysql:host=[HOST];database=[DATABASE]";
$dbh = DBI->connect($q_string, $user, $password, { RaiseError => 1, AutoCommit => 0 });
La línea de $qstring contiene los siguientes componentes: DBI: [MÓDULO]: En ese caso sería mysql host=[HOST]; El host al que te vas a conectar. Lo más seguro es que sea localhost database=[DATABASE] El nombre del database al que te vas a conectar. En este caso sería Tickets. SALUDOS
_________________ Uriel Lizama Perl programmer fundador de Perl en Español
|
2005-05-19 11:01 @501 |
|
|
Marcos
Perlero Nuevo
|
Registrado: 2005-02-09 12:09 @548 Ubicación: Pachuca, Hgo Mensajes: 4
|
|
|
|
|
Hola como estan, gracias por sus comentarios me han servido de mucho, mira si todos mi scrips tienen la conexion a la DB, es mas cuando te logeas en el sistema que genera va a la BD y jala la informacion, para poder ingresar, pero lo que pasa es que se supone que debe de guardar esa informacion en una Cookie, para poder mantener la sesion y que el sistema te pueda abrir la pantalla correcta de acuerdo al usuario, este sistema ya estaba implementado en windows 2000, pero me pidieron que lo migrara a Linux Red Hat 8 por lo que desde que lo hice he tenido un poco de problemillas, en este caso despues de login, no me respeta la sesion , y no me da los datos de los usuarios, y la expira inmediatamente, sabiendo que debe expirar a los 15 min, o sea para no hacerla cansada, despues del login, como que se cae la conexion o no puede hacerla.
Aqui les agrego el codigo completo del scrip que es q yo pienso causa el problema :
#!/usr/bin/perl
use CGI ':standard'; use DBI; #Inicio del DBI use CGI::Session qw/-api3/; #Incio de una Sesion CGI
print header; $sid = cookie(CGISESSID); #Permite mantener la sesion por medio de la cookie creada $session = new CGI::Session(undef, $sid, {Directory=>'/tmp'});
$username = $session->param('username'); #obtiene el parametro de la sesion $ID = $session->param('ID'); #obtiene el parametro de la sesion
$dbh = DBI->connect('DBI:mysql:Tickets') #Se conecta a la base de datos or die "Couldn't connect to database: " . $DBI->errstr; $sth = $dbh->prepare('Select * From usuario where username = ?') #Hace referencia a la tabla de tickets del usuario especificado or die "Couldn't prepare statement: " . $dbh->errstr;
my @data; $sth->execute($username); # Ejecuta el query para validar que existe el usuario # Read the matching records and print them out while (@data = $sth->fetchrow_array()) { #Trae cada uno los registros del usuario nombre ,apellidos $nombre = $data[1]; $apellidopat = $data[2]; $apellidomat = $data[3]; } print<<FIN; <html> <head> <title>Menu</title> <meta http-equiv="Content-Type" content="text/html;"> <!-- Fireworks MX Dreamweaver MX target. Created Wed Jul 16 11:13:56 GMT-0500 (Hora de verano de México) 2003--> <script language="JavaScript"> <!--
function mmLoadMenus() { if (window.mm_menu_0627130038_0) return; window.mm_menu_0627130038_0 = new Menu("root",107,20,"Arial, Helvetica, sans-serif",14,"#000066","#0000cc","#a4c4e3","#ccffff","center","middle",3,0,1000,-5,7,true,true,false,0,false,false); mm_menu_0627130038_0.addMenuItem("Principal","window.open('busqueda.pl', 'contenido');"); mm_menu_0627130038_0.addMenuItem("Crear Ticket","window.open('crear.pl', 'contenido');"); mm_menu_0627130038_0.addMenuItem("Buscar Ticket","window.open('buscaticket.pl', 'contenido');"); mm_menu_0627130038_0.addMenuItem("Cerrar Sesión","location='cerrar.pl'"); mm_menu_0627130038_0.hideOnMouseOut=true; mm_menu_0627130038_0.menuBorder=1; mm_menu_0627130038_0.menuLiteBgColor='#8aa4c1'; mm_menu_0627130038_0.menuBorderBgColor='#8aa4c1'; mm_menu_0627130038_0.bgColor='#8aa4c1'; window.mm_menu_0716104230_1 = new Menu("root",107,20,"Arial, Helvetica, sans-serif",14,"#000066","#0000cc","#8aa4c1","#ccffff","center","middle",3,0,1000,-5,7,true,true,false,0,false,false); mm_menu_0716104230_1.addMenuItem("Usuarios","window.open('usuarios.pl', 'contenido');"); mm_menu_0716104230_1.addMenuItem("Crear ","window.open('creausuario.pl', 'contenido');"); mm_menu_0716104230_1.addMenuItem("Buscar","window.open('buscarusuario.pl', 'contenido');"); mm_menu_0716104230_1.addMenuItem("Eliminar","window.open('eliminarusuario.pl', 'contenido');"); mm_menu_0627130038_0.hideOnMouseOut=true; mm_menu_0627130038_0.menuBorder=1; mm_menu_0627130038_0.menuLiteBgColor='#8aa4c1'; mm_menu_0627130038_0.menuBorderBgColor='#8aa4c1'; mm_menu_0627130038_0.bgColor='#8aa4c1';
mm_menu_0716104230_1.writeMenus(); } // mmLoadMenus()
//--> </script> <script language="JavaScript1.2" src="../ticketimg/interfaz_02/mm_menu.js"></script> </head> <body background="../ticketimg/interfaz_01/n01_r3_c9.gif" > <!--o nLoad="MM_preloadImages('Banner_r1_c1_f2.gif');"--> <center>        <font size="5" color="#CCCCCC"><strong>Bienvenido </strong>           <font size="5" color="#CCCCCC"><strong><em> $nombre $apellidopat $apellidomat</strong>
<script language="JavaScript1.2">mmLoadMenus();</script> <table border="0" cellpadding="0" cellspacing="0" width="730"> <!-- fwtable fwsrc="02baner_02.png" fwbase="02baner_01.gif" fwstyle="Dreamweaver" fwdocid = "742308039" fwnested="0" --> <tr> <td><img src="../ticketimg/interfaz_02/spacer.gif" width="339" height="1" border="0" alt=""></td> <td><img src="../ticketimg/interfaz_02/spacer.gif" width="54" height="1" border="0" alt=""></td> <td><img src="../ticketimg/interfaz_02/spacer.gif" width="337" height="1" border="0" alt=""></td> <td><img src="../ticketimg/interfaz_02/spacer.gif" width="1" height="1" border="0" alt=""></td> </tr>
<tr>
<td rowspan="3"><a href="#" onMouseOver="MM_showMenu(window.mm_menu_0627130038_0,0,39,null,'Banner_r1_c1')"><img name="Banner_r1_c1" src="../ticketimg/interfaz_02/Banner_r1_c1.gif" width="339" height="39" border="0" alt=""></a></td> <td colspan="2"><img name="Banner_r1_c2" src="../ticketimg/interfaz_02/Banner_r1_c2.gif" width="391" height="22" border="0" alt=""></td> <td><img src="../ticketimg/interfaz_02/spacer.gif" width="1" height="22" border="0" alt=""></td> </tr> <tr> FIN if ($ID >= 100){ #LA interfaz de Menu para el usuario, print<<FIN; <tr> <td><img name="Banner_r2_c2" src="../ticketimg/interfaz_02/Banner_r2_c2.gif" width="54" height="17" border="0" alt=""></td> <td rowspan="2"><img name="Banner_r2_c3" src="../ticketimg/interfaz_02/Banner_r2_c3.gif" width="337" height="39" border="0" alt=""></td> <td><img src="../ticketimg/interfaz_02/spacer.gif" width="1" height="17" border="0" alt=""></td> </tr> FIN }else{ #LA interfaz de Menu para el super usuario, de la maniputación de los usuarios (Crear,Modificar,Eliminar). print<<FIN; <tr> <td><img name="Banner_r2_c2" src="../ticketimg/interfaz_02/Banner_r2_c2.gif" width="54" height="17" border="0" alt=""></td> <td rowspan="2"><a href="#" onMouseOver="MM_showMenu(window.mm_menu_0716104230_1,-41,-23,null,'n02baner_01_r3_c3')"><img name="n02baner_01_r3_c3" src="../ticketimg/interfaz_02/02baner_01_r3_c3.gif" width="337" height="39" border="0" alt=""></a></td> <td><img src="../ticketimg/interfaz_02/spacer.gif" width="1" height="16" border="0" alt=""></td> </tr> FIN } print<<FIN; <td colspan="2"><img name="Banner_r3_c1" src="../ticketimg/interfaz_02/Banner_r3_c1.gif" width="393" height="22" border="0" alt=""></td> <td><img src="../ticketimg/interfaz_02/spacer.gif" width="1" height="22" border="0" alt=""></td> </tr> </table> </center> </body> </html>
FIN $dbh->disconnect; print end_html;
_________________ J.Marcos Cardozo H.
|
2005-05-23 13:58 @623 |
|
|
Marcos
Perlero Nuevo
|
Registrado: 2005-02-09 12:09 @548 Ubicación: Pachuca, Hgo Mensajes: 4
|
|
|
|
|
Hola, mira ya cheque lo que me comentas de las cookies, si explorador si las genera, ya revise las sintaxis, y estan de forma correcta, mira lo que esta pasando que al logearte e iniciar la sesion, me da esta cookie por ejemplo :
Set Cookie: CGISESSID=8348f598b7dd1de88391edd9cc904a26; path=/ Date: Mon, 23 May 2005 18:49:19 GMT Content-Type: text/html; charset=ISO-8859-1 marcos jmch 100.
Esto se genera por que yo estoy parando la ejecucion de programa para verficar si esta generando la cookie y esta viajando ala BD a checar el usuario, password y su ID y como vez si me la da, tanto la cookie como los datos.
Te pongo el scrip donde genero la session y me da los datos que te mostre anteriormente :
#!/usr/bin/perl -w
use CGI::Cookie; use CGI ':standard'; use DBI; use CGI::Session qw/-api3/;
$dbh = DBI->connect('DBI:mysql:Tickets') #Se conecta a la base de datos or die "Couldn't connect to database: " . $DBI->errstr; $sth = $dbh->prepare('SELECT * FROM usuario WHERE username = ? AND password = ?') or die "Couldn't prepare statement: " . $dbh->errstr; # Se hace referencia a la tabla
$username = param('username'); #se obtiene un parametro de la pagina anterior $password = param('password'); $resultado = $sth->execute($username,$password); # Ejecuta el query para validar que existe el usuario
while (@data = $sth->fetchrow_array()) { $ID = $data[0]; #recibe el id del usuario } if($resultado == 1 ) {
my $session = new CGI::Session("driver:File", $cgi, {Directory=>'/tmp'}); #Crea una nueva session print "Set-Cookie: $session\n"; print "Content-Type: text/html\n\n"; $session->param('username',$username); #Lleva los parametros del usuario a la sesion $cookie = cookie(CGISESSID => $session->id); #Se crea una cookie con los datos de la sesion print header( -cookie=>$cookie);
#Diferentes parametros que se suben a la sessi?n para utilizarlos m?s adelante nel os dem?s programas print $username; print $password; print $session->param('ID',$ID); #sebe el id del usuario a la sesi?n $session->param('sentenciaUsuario',"Select * from ticket where username = ? ORDER BY ticket_id DESC"); $session->param('sentenciaSoporte',"Select * from ticket where Tipo = ? ORDER BY prioridad,status DESC "); $session->param('sentenciaSuperUsuario',"Select * from ticket ORDER BY prioridad,status DESC "); $session->param('usuariosentencia',"SELECT * FROM usuario ORDER BY id DESC");
#A la sesi?n se le da un tiempo de expiraci?n de 10 minutos $session->expire('username', '+1h'); print '<META HTTP-EQUIV="Refresh" CONTENT="0;URL=../principal.pl">'; } else{
print '<META HTTP-EQUIV="Refresh" CONTENT="0;URL=../login.pl?error=1">' #print redirect('../login.pl?error=1\n\n'); #Si en la verificacion es erronea regresa a la pagina de inicioi }
$sth->finish; print "\n"; $dbh->disconnect;
Esta cookie pasa al siguiente programa el cual me va a dar la pantalla de acuerdo al usuario, que es el scrip que puse en el mensaje anterior, pero el problema que cuando quiero provar como en este scrip, aqui no me nada ningun dato solo me aparece Content-Type: text/html; charset=ISO-8859-1,
_________________ J.Marcos Cardozo H.
|
|
Página 1 de 1
|
[ 8 mensajes ] |
|
| Reglas del Foro |
No puedes abrir nuevos temas en este Foro No puedes responder a temas en este Foro No puedes editar tus mensajes en este Foro No puedes borrar tus mensajes en este Foro No puedes enviar adjuntos en este Foro
|
|
Socializa |
 |
|