elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


  Mostrar Mensajes
Páginas: 1 ... 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 [60] 61 62 63 64 65 66 67 68 69 70 71 72
591  Programación / PHP / Re: Mis Funciones en PHP, by Diabliyo en: 19 Julio 2008, 03:23 am
FUNCIONES PARA BASES DE DATOS.

Una Base de Datos es una herramienta que permite almacenar informacion y gestionar dicha informacion mediante algun gestor de base de datos, alguna aplicacion o directamente mediante funciones especificas de algun lenguaje de programacion.

Las bases de datos estan conformadas por tablas, estas a su vez contienen campos los cuales guardan informacion en cada campo segun el tipo de campo, existen diversion tipos de campos, algunos podrian se: Cierto numero de caracteres (varchar), texto (text), numeros cortos (int), numeros grandes (bigint), etc, etc.. Estos valores pueden ser insertados, actualizados o eliminados, de igual forma se pueden realizar busquedas extensas o cortas mediante algun campoa que coincida con una muestra o una determinada palabra.

INTRODUCCION.

Las funciones que se mostraran a continuacion presentan principalmente varios valores establecidos por defecto, los cuales son Variables Definidas, estas variables podran ser utilizadas en cualquier parte del codigo fuente que realizemos y pueden ser utilizadas con toda confianza, ya que estas variables estaran solo a disposicion de nuestro interprete PHP y jamas para el usuario que esta realizando consultas, busquedas o bien navegando en nuestro sitio web.

Tambien es importante saber cual es la configuracion que posee nuestro servicio php (php.ini), ya que estas funciones trabajan en la siguiente configuracion de php:

Código:
register_globals= off

Las Variables Definidas que utilizaremos son: variable_username, variable_password, variable_base y variable_hosting, estas variables sirven para conectarse (username, password) a una base de datos del host (hosting) y utilizar una Base de Datos (base) en especifico.

Conexion a la Base de Datos.

Esta funcion nos permite conectarnos a una base de datos (ya establecida) utilizando 4 variables definidas que son:

  • SERVER
    Variable definida que posee la direccion del hosting.
  • BASE_USR
    Variable definida que posee el nombre de usuario para conectarse a la base de datos.
  • BASE_PASS
    Variable definida que posee el password para conectarse a la base de datos.
  • BASE
    Variable definida que posee el nombre de la base de datos a utilizar.

Una vez realizada la llamada a esta funcion, realizara la conexion al hosting, seleccionara la base de datos y retornara el enlace de conexion ($link) para manipular nuestra base de datos.

Por lo general muchos programadores optan por hacer la llamada directamente cada vez antes que quieran manipular la base de datos, pero en este caso (en mis funciones), no se realizaran llamadas a conectar() directamente por nosotros, sino que nos dedicaremos unicamente a realizar la llamada a la funcion de manipulacion a la base de datos (insertar, actualizar, eliminar, listar, etc...) y que esta misma funcion realize la llamada a conectar() para ahorrar codigo ;).

Código
  1. //realiza conexion a la Base de Datos
  2. function conectar()
  3. {
  4. if( !($link= mysql_connect( "". SERVER. "", "". BASE_USR. "", "". BASE_PASS. "" )) )
  5. {
  6. echo "<span id=\"letras_error\">Error 01: Error para Conectarse a MySQL.<br>";
  7. echo "Error en Usuario y/o Contrase&ntilde;a.<br>";
  8. echo mysql_error($link). "</span>";
  9. $link= "INSTALL";
  10. }
  11. else if( !mysql_select_db( "". BASE. "", $link ) )
  12. {
  13. echo "<span id=\"letras_error\">Error 02: Problemas para Tomar la Base de Datos.<br>";
  14. echo "No se Encuentra la Base de Datos.<br>";
  15. echo mysql_error($link). "</span>";
  16. $link= "INSTALL";
  17. }
  18. return $link;
  19. }

Inserciones.

Ya que conocimos la funcion de conectar(), nos centraremos en la funcion de insertar.

Esta funcion nos servira para insertar datos a una tabla de la base de datos, utiliza dos argumentos los cuales son:

  • $base
    Es del tipo caracteres (char) y posee el nombre de la tabla que vamos a manipular.
  • $valores
    Es un arreglo (array), el cual recorre para divir su contenido en dos variables mas: $vars (variables o campos) y $datos (contenido que se les insertara a los campos)

Para llamar eficasmente a esta funcion, es necesario primero generar un arreglo con los campos y valores que contendra cada campo, despues realizar la llamada pasandole como argumento el nombre de la base de datos y el arreglo, en caso de error retorna un 0 .

Código
  1. //insercion de valores a una tabla
  2. function insertar_bdd( $base_t, $valores )
  3. {
  4. $link= conectar();
  5.  
  6. if( count($valores)>0 ) //entonces existen valores en el array
  7. {
  8. $vars="";
  9. $datos="";
  10. $i=0;
  11.  
  12. while( list($a, $b)=each($valores) )
  13. {
  14. $i++;
  15.  
  16. $vars .= $a;
  17. $datos .= $b;
  18.  
  19. if( $i!=count($valores) )
  20. {
  21. $datos .= ", ";
  22. $vars .= ", ";
  23. }
  24. }
  25.  
  26. if( !($resp= mysql_query( "insert into ". $base_t. " ( ". $vars. " ) values( ". $datos. " );", $link )) )
  27. {
  28. echo "<span id=\"letras_error\">Error 03: Problema para Realizar Movimiento/Consulta.";
  29. echo mysql_error(). "</span>";
  30. }
  31. else
  32. {
  33. unset( $valores );
  34. unset($a);
  35. unset($b);
  36. unset($i);
  37. unset( $var );
  38. unset( $datos );
  39. @mysql_close($link);
  40. return $resp;
  41. }
  42. }
  43. else
  44. echo "<span id=\"letras_error\">Error 04: Problema para descifrar Datos para Realizar Consulta.</span>";
  45.  
  46. @mysql_close($link);
  47. return "ERROR";
  48. }

Este es un ejemplo de implementacion en codigo:

Código
  1. $trama= array(
  2.          "nombre"=>"juan",
  3.          "edad"=>"20",
  4.          "sexo"="desconocido" );
  5.  
  6. if( !insertar_bdd( "AGENDA", $trama )
  7.          echo "<br>Error al Insertar";
  8. else          echo "<br>Datos insertados con exito.";

Actualizaciones.

Esta funcion nos permitira actualizar datos de una tabla de la base de datos, utiliza dos argumentos los cuales son:

  • $base
    Es del tipo caracteres (char) y posee el nombre de la tabla que vamos a manipular.
  • $valores
    Es un arreglo (array), el cual recorre para divir su contenido en dos variables mas: $vars (variables o campos) y $datos (contenido que se les insertara a los campos)

Para llamar eficasmente a esta funcion, es necesario primero generar un arreglo con los campos y valores que contendra cada campo, despues realizar la llamada pasandole como argumento el nombre de la base de datos y el arreglo, en caso de error retorna un 0 .

Tambien es importante tomar muy en cuenta el primer valor del arreglo, ya que este valor no sera actualizado, sino que se utilizara como valor para identificar el campo de la tabla que se actualizara.

Código
  1. //actualizar valores existentes de un campos de la tabla
  2. function actualizar_bdd( $base_t, $valores )
  3. {
  4. $link= conectar();
  5.  
  6. if( count($valores)>0 ) //existen valores en el array
  7. {
  8. $condicion= "";
  9. $datos="";
  10. $i=0;
  11.  
  12. while( list($a, $b)=each($valores) )
  13. {
  14. $i++;
  15. if( $i==1 )
  16. $condicion .= $a. "=". $b;
  17. else
  18. {
  19. $datos .= $a. "=". $b;
  20.  
  21. if( $i!=count($valores) )
  22. $datos .= ", ";
  23. }
  24. }
  25.  
  26. if( !($resp= mysql_query( "update ". $base_t. " set ". $datos. " where ". $condicion. ";", $link )) )
  27. {
  28. echo "<span id=\"letras_error\">Error 03: Problema para Realizar Movimiento/Consulta.";
  29. echo mysql_error(). "</span>";
  30. }
  31. else
  32. {
  33. unset( $datos );
  34. unset($i);
  35. unset($a);
  36. unset($b);
  37. @mysql_close($link);
  38. return $resp;
  39. }
  40. }
  41. else
  42. echo "<span id=\"letras_error\">Error 04: Problema para descifrar Datos para Realizar Consulta.</span>";
  43.  
  44. @mysql_close($link);
  45. return "ERROR";
  46. }

Este es un ejemplo de implementacion en codigo:

Código
  1. $trama= array(
  2.          "ID"=>"'4'",
  3.          "nombre"=>"juan",
  4.          "edad"=>"20",
  5.          "sexo"="desconocido" );
  6.  
  7. if( !actualizar_bdd( "AGENDA", $trama )
  8.          echo "<br>Error al Actualizar";
  9. else          echo "<br>Datos insertados con exito.";

Eliminacion.

Esta funcion nos permitira eliminar datos de una tabla de la base de datos, utiliza dos argumentos los cuales son:

  • $base
    Es del tipo caracteres (char) y posee el nombre de la tabla que vamos a manipular.
  • $valores
    Es un arreglo (array), el cual recorre para divir su contenido en dos variables mas: $vars (variables o campos) y $datos (contenido que se les insertara a los campos)

Para llamar eficasmente a esta funcion, es necesario primero generar un arreglo con los campos y valores que contendra cada campo, despues realizar la llamada pasandole como argumento el nombre de la base de datos y el arreglo, en caso de error retorna un 0 .

Tambien es importante tomar muy en cuenta que solo es necesario un valor para eliminar de la base de datos, y para tener una mayor eficacia, se recomienda siempre utilizar valores unicos que ningun usuario pueda repetir, esto son valores de identificacion (ID).

Código
  1. //elimina una celda de la tabla
  2. function eliminar_bdd( $base_t, $valores )
  3. {
  4. $link= conectar();
  5.  
  6. if( strchr( $valores, "=" ) ) //si existe el  :  tons ahi mas de 1 valor
  7. {
  8. $resp= mysql_query( "select * from ". $base_t. " where ". $valores. ";", $link );
  9. if( mysql_num_rows($resp) == 0 )
  10. return 0;
  11.  
  12. if( !(mysql_query( "delete from ". $base_t. " where ". $valores. ";", $link )) )
  13. {
  14. echo "<span id=\"letras_error\">Error 03: Problema para Realizar Movimiento/Consulta.";
  15. echo mysql_error(). "</span>";
  16. }
  17. else
  18. {
  19. unset( $resp );
  20. @mysql_close($link);
  21. return 1;
  22. }
  23. }
  24. else
  25. echo "<span id=\"letras_error\">Error 04: Problema para descifrar Datos para Realizar Consulta.</span>";
  26.  
  27. @mysql_close($link);
  28. return 0;
  29. }

Este es un ejemplo de implementacion en codigo:

Código
  1.  
  2. if( !eliminar_bdd( "AGENDA", "ID=5" )
  3.          echo "<br>Error al Eliminar";
  4. else          echo "<br>Datos insertados con exito.";
592  Programación / PHP / Mis Funciones en PHP, by Diabliyo en: 19 Julio 2008, 03:01 am
Que tal, pues dedicare este post para platicarles y mostrarles el codigo que utilizo en la mayoria de mis aplicaciones web en php, estas aplicaciones podran ser utilizadas en cual quier aplicacion personal ya que estan pensadas con la finalidad de ahorrar codigo y hacer un software mas rapido.

En este primer post mencionare unicamente el indice, he ire agregandole los sub-temas (segun el nombre de la funcion) al indice, para evitar hacer todo en un mismo POST.

Por otra parte, sientanse libres de criticar, aportar, modificar mis funciones en este mismo hilo, ya que mediante el indice podran dirigirse a cada uno de los temas (segun el nombre de la funcion) y poder enriquecer este posting con sus comentarios.



INDICE
  • Funciones para Bases de Datos
    • Introduccion
    • Conexion a la Base de Datos.
    • Inserciones
    • Actualizaciones
    • Eliminacion
    • Consultas


Continuara....
593  Programación / PHP / Re: No logro realizar una consulta con limite !! en: 19 Julio 2008, 00:40 am
Vaya... que desperdicio de POST he echo, llevo un record de 2 (ayer uno y hoy otro)....

Disculpen la tonteria, pero alguien porfavor borre este mensaje....

La solucion fue, que este pedazito de codigo en la funcion de consulta:

Código:
if( strchr( $valores, ":" ) ) //si existe el  :  tons ahi mas de 1 valor

Jamas hiba a permitir realizar bien la peticion, ya que el limite de consulta asi: 1, 10 (es un ejemplo), en cambio con el pedazito de codigo ese que nombre, yo estaba exigiendo esta notacion: 1:10.... Y lo que sucede es que en ciertas consultas he usado valores concatenados asi... pero en fin.. un error cualquiera !!

594  Programación / PHP / No logro realizar una consulta con limite !! en: 19 Julio 2008, 00:35 am
Que tal, nose si es que ya ando muy desesperdo, pero no logro realizar una consulta con limites, pero bueno, es que utilizo una funcion especial que realize en mi sistema, la funcion es esta:

Código:
<?php
function consultar_limite_enorden( $base_t, $valores, $regla )
{
$link= conectar();

if( strchr( $valores, ":" ) ) //si existe el  :  tons ahi mas de 1 valor
{
$valores= str_replace( ":", ",", $valores ); //cambiamos el :  por  ,

if( !($resp= mysql_query( "select * from ". $base_t. " ORDER BY ". $regla. " LIMIT ". $valores. ";", $link )) )
{
echo "<span id=\"letras_error\">Error 03: Problema para Realizar Movimiento/Consulta.";
echo mysql_error(). "</span>";
}
else
{
@mysql_close($link);
return $resp;
}
}
else
echo "<span id=\"letras_error\">Error 04: Problema para descifrar Datos para Realizar Consulta.</span>";

@mysql_close($link);
return "ERROR";
}
?>

Y aqui es donde invoco la funcion para hacer la consulta con limites:

Código:
<?php
$cons_log= consultar_enorden( "LOG", "1,10", "FECHA_LOGIN DESC");

echo mysql_num_rows($cons_log). " ";

if( mysql_num_rows($cons_log)>1 )
echo "registros";
else
echo "registro";
?>
595  Programación / PHP / [SOLUCIONADO] Como crear Tags BBCode para YOUTUBE ?? en: 17 Julio 2008, 19:57 pm
Hola:

En mi sistema web tengo varios TAGS BBCode disponibles, pero me gustaria poner a disposicion un TAGS BBCode de Youtube, para que los usuarios puedan postear el video de youtube y se vea ahi mismo en la pagina. Espero y me puedan ayudar !!!

Mientras, les platicare mi metodo para crear BBCode:

Primeramente, cualquier mensaje que se agrege ya sea por mi o tipo comentario pasa por una funcion llamada proteger_cadena(), esta protege la cadena para evitar Injeccion HTML, Injeccion SCRIPT e Injeccion SQL, despues esta misma funcion realiza el llamado de otra funcion que es msg2msgtags($cadena) que se encarga de hacer el BBCode. El codigo es el siguiente:

Funcion msg2msgtags()
Código
  1. <?php
  2. function msg2msgtags( $mensaje )
  3. {
  4. if( strchr( $mensaje, "[b]" ) &&  strchr( $mensaje, "[/b]" ) )
  5. {
  6. $mensaje= str_replace( "[b]", "<b>", $mensaje );
  7. $mensaje= str_replace( "[/b]", "</b>", $mensaje );
  8. }
  9. if( strchr( $mensaje, "[i]" ) &&  strchr( $mensaje, "[/i]" ) )
  10. {
  11. $mensaje= str_replace( "[i]", "<i>", $mensaje );
  12. $mensaje= str_replace( "[/i]", "</i>", $mensaje );
  13. }
  14. if( strchr( $mensaje, "[u]" ) &&  strchr( $mensaje, "[/u]" ) )
  15. {
  16. $mensaje= str_replace( "[u]", "<u>", $mensaje );
  17. $mensaje= str_replace( "[/u]", "</u>", $mensaje );
  18. }
  19. if( strchr( $mensaje, "[center]" ) &&  strchr( $mensaje, "[/center]" ) )
  20. {
  21. $mensaje= str_replace( "[center]", "<center>", $mensaje );
  22. $mensaje= str_replace( "[/center]", "</center>", $mensaje );
  23. }
  24. if( strchr( $mensaje, "[img]" ) &&  strchr( $mensaje, "[/img]" ) )
  25. {
  26. $mensaje= str_replace( "[img]", "<img class=\"img_post\" src=\"", $mensaje );
  27. $mensaje= str_replace( "[/img]", "\">", $mensaje );
  28. }
  29. //OJO, los '\' solo los puse para que salieran en este POST, ya que si quito los '\'
  30. //el codigo sale CORTADO en este post...
  31. if( strchr( $mensaje, "\[code\]" ) ||  strchr( $mensaje, "\[/code\]" ) )
  32. {
  33. $mensaje= str_replace( "\[code\]", "<div id=\"etiqueta_code\">", $mensaje );
  34. $mensaje= str_replace( "\[/code\]", "</div>", $mensaje );
  35. }
  36.  
  37. //<object width="425" height="344">
  38. //<param name="movie" value="http://www.youtube.com/v/Iur_NBn6b2k&hl=en&fs=1"></param>
  39. //<param name="allowFullScreen" value="true"></param>
  40. //<embed src="http://www.youtube.com/v/Iur_NBn6b2k&hl=en&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed>
  41. //</object>
  42. /*if( strchr( $mensaje, "[youtube]" ) ||  strchr( $mensaje, "[/youtube]" ) )
  43. {
  44. $mensaje= str_replace( "[youtube]", "", $mensaje );
  45. $mensaje= str_replace( "[/youtube]", "", $mensaje );
  46. }*/
  47.  
  48. if( strchr( $mensaje, "\n" ) )
  49. {
  50. $mensaje= str_replace( "\n", "<br>", $mensaje );
  51. }
  52. if( strchr( $mensaje, "\t" ) )
  53. {
  54. $mensaje= str_replace( "\t", "&nbsp;&nbsp;&nbsp;", $mensaje );
  55. }
  56. if( strchr( $mensaje, "<script>" ) )
  57. {
  58. $mensaje= str_replace( "<script>", htmlentities( "<script>", ENT_QUOTES ), $mensaje );
  59. }
  60. if( strchr( $mensaje, "</script>" ) )
  61. {
  62. $mensaje= str_replace( "</script>", htmlentities( "</script>", ENT_QUOTES ), $mensaje );
  63. }
  64. return $mensaje;
  65. }
  66. ?>

Funcion proteger_cadena()
Código
  1. <?php
  2. function proteger_cadena( $cadena )
  3. {
  4. $out=$cadena;
  5.  
  6. if( strchr( $out, "<" ) ) //con esto vitamos injeccion de codigo
  7. $out= str_replace( "<", htmlentities("<", ENT_QUOTES), $out );
  8. if( strchr( $out, ">" ) ) //con esto vitamos injeccion de codigo
  9. $out= str_replace( ">", htmlentities(">", ENT_QUOTES), $out );
  10.  
  11. $out= msg2msgtags($out);
  12.  
  13. return $out;
  14. }
  15. ?>

Codigo de Ejemplo, antes de que el mensaje de guarde en la base de datos:

Código:
<?php
$msg= proteger_cadena($_POST["mensaje_noticia"]);

//generamos array de insercion mysql
$valores= array(
"autor"=>"'". $_SESSION["log_usr"]. "'",
"titulo"=>"'". htmlentities($_POST["titulo_noticia"], ENT_QUOTES). "'",
"mensaje"=>"'". htmlentities($msg, ENT_QUOTES). "'",
"fecha"=>"'". time(). "'",
"menu"=>"'". htmlentities($buf_menu["NOMBRE"], ENT_QUOTES). "'",
"sección"=>"'". htmlentities($buf_sec["NOMBRE"], ENT_QUOTES). "'" );

unset($msg);

if( insertar_bdd( "NOTICIAS", $valores )==0 )
echo "Error en la Insercion de los Datos.";
else
echo "Datos Agregados con Exito.";
?>
596  Programación / PHP / Re: cifrar archivo con PHP en: 17 Julio 2008, 18:44 pm
Eso pense, me acorde k MD5 es one-way asi k no me importa si fuese otro algoritmo, pero quiero k el usuario encripte su archivo con un password, hay programas que hacen eso pero claro estan en otros lenguajes (c,c++) y de poco me sirven.
Alguna otra sugerencia por favor?

Estas equivocado, solo transportalo a PHP y listo !!

597  Programación / PHP / Re: Proyecto de Software Libre en PHP !!.. Se aceptan PARTICIPANTES/COLABORADORE en: 17 Julio 2008, 18:43 pm
Cambia los scwicht case por ifs ya que estos son mas rápidos.

Te recomiendo que leas esto: http://www.emezeta.com/articulos/funciones-php-optimizar-codigo.

He leido todo el texto y pues en lo unico que (segun el manual este que me pusiste) estaria "fallando" seria en el  switch, ya que las demas funciones que poner y otras cosas, pues yo utilizo las mas rapidas ;) (asi como lo menciona ahi).

Bueno, si es necesario cambiar TOOODOS los switch por condicionales if - else, entonces el codigo creceria demasiado y el archivo final archivo.tar.gz o archivo.zip (el programa vaya) pesaria casi el DOBLE de lo que pesa actualmente y no eso, no lo creo conveniente !!...

Pienso que posiblemente debe haber alguna otra forma o algo que hacer para mejorar el codigo, ya que los switch's son muy buenos para poder dividir mejor el codigo e identificar las partes del mismo !!...

En fin, cada quien.....

Espero seguir obteniendo respuestas y comentarios, y si alguien se atreve a cambiar todos los SWITCH por condicionales para demostrar que la rapidez es NOTABLE, pues tendra su lugar en el proyecto...

Vaya, las ideas se aplauden, pero no lo son todo, es necesario demostrar con echos !!!, reitero su apoyo y espero alguien quiera enrollarse ene ste proyecto de software, de momento el proyecta va muy avanzado y es muy prometedor:

Vean la nueva version funcionando aqui:

http://em-clanmoh.sie-group.net/

598  Programación / PHP / Re: [SOLUCIONADO] Porque da este error ?? en: 17 Julio 2008, 17:49 pm
Fue una estupides, solamente se me paso crear el campo SESION en el servidor :(, en fin, suele suceder !!

599  Programación / PHP / [SOLUCIONADO] Porque da este error ?? en: 17 Julio 2008, 17:26 pm
Hola:

Implemente un sistema de Log para poder determinar si un usuario esta o no conectado a la pagina, a su vez que el mismo sistema cierre su sesion una ves pasado el tiempo maximo de duracion de una sesion !!...

En fin, localmente (localhost) el codigo funciona bien y no error alguno, pero en mi hosting web me da el siguiente error:

Código:
Error 03: Problema para Realizar Movimiento/Consulta.Unknown column 'SESION' in 'where clause'
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/content/d/i/a/diabliyo/html/em-clanmoh/
modulos/base.php on line 607

Warning: Variable passed to each() is not an array or object in /home/content/d/i/a/diabliyo/html/em-clanmoh/modulos/base.php on
 line 610
Error 03: Problema para Realizar Movimiento/Consulta.Unknown column 'sesion' in 'field list'
Warning: Cannot modify header information - headers already sent by (output started at /home/content/d/i/a/diabliyo/html/em-clanmoh/
modulos/base.php:125) in /home/content/d/i/a/diabliyo/html/em-clanmoh/index.php on line 45

Les pongo las lienas de codigo que menciona...

La primera es del archivo base.php linea 610:

Código:
<?php
598 function deamon_logd()
599 {
600 //Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14
601
602 $log_cons= consultar_con( "LOG", "SESION='". session_id(). "'" );
603 $ip= $_SERVER['REMOTE_ADDR'];
604 $nav= get_browser();
605
606 if( mysql_num_rows($log_cons)==0 ) //no existe la SESION, esta entrando nuevo usuario
607 {
608 //recolectamos informacion
609 while( list($key, $val)=each($nav) )
610 {
if( !strcmp($key, "parent" ) )
$navegador= $val;
else if( !strcmp($key, "platform" ) )
$so= $val;
}

$trama= array(
"nick"=>"'Visitante'",
"ip"=>"'". $ip. "'",
"so"=>"'". $so. "'",
"navegador"=>"'". $navegador. "'",
"sesion"=>"'". session_id(). "'",
"fecha_login"=>"'". time(). "'"
);

insertar_bdd( "LOG", $trama );
unset($trama);
}
else //la SESION ya existe
{
if( usuario_legitimo() )
{
$trama= array(
"sesion"=>"'". session_id(). "'",
"nick"=>"'". $_SESSION["log_usr"]. "'"
);

actualizar_bdd( "LOG", $trama );
unset($trama);
}
}

unset($log_cons);

//establece los cierres de sesion
temporizador_de_sesiones();
}
?>
600  Programación / PHP / Re: Como detecto cuando el usuario abandone la pagina ?? en: 16 Julio 2008, 23:36 pm
Listo... Ya pude hacer que la sesion se cierre en un tiempo determinado, pero tambien tomando en cuenta que el usuario NO este activo en la pagina, en el caso que este activo pues le actualiza el tiempo y le agrega tiempo extra. Fue simple:

Código:
<?php
function deamon_logd()
{
$ip= $_SERVER['REMOTE_ADDR'];
$nav= get_browser();

//Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14

$log_cons= consultar_con( "LOG", "SESION='". session_id(). "'" );

if( mysql_num_rows($log_cons)==0 ) //no existe la SESION, esta entrando nuevo usuario
{
//recolectamos informacion
while (list($key, $val)=each($nav))
{
if( !strcmp($key, "parent" ) )
$navegador= $val;
else if( !strcmp($key, "platform" ) )
$so= $val;
}

$trama= array(
"nick"=>"'Visitante'",
"ip"=>"'". $ip. "'",
"so"=>"'". $so. "'",
"navegador"=>"'". $navegador. "'",
"sesion"=>"'". session_id(). "'",
"fecha_login"=>"'". time(). "'"
);

insertar_bdd( "LOG", $trama );
}
else //la SESION ya existe
{
if( usuario_legitimo() )
{
$trama= array(
"sesion"=>"'". session_id(). "'",
"nick"=>"'". $_SESSION["log_usr"]. "'"
);

actualizar_bdd( "LOG", $trama );
}
}

unset($log_cons);

//establece los cierres de sesion
temporizador_de_sesiones();
}

function temporizador_de_sesiones()
{
$log_cons= consultar_con( "LOG", "FECHA_LOGOUT=''" ); //consultamos sesiones abiertas
$flag=0; //bandera para saber si debemos cerrar la sesion o dejarla abierta

while( $buf= mysql_fetch_array($log_cons) )
{
//si la SESION es igual, aun esta activo en la web
if( !strcmp( session_id(), $buf["SESION"] ) )
$flag=1; //bandera activada

//si la no esta activada, entonces posiblemente no este conectado
if( $flag==0 )
{
if( ($buf["FECHA_LOGIN"]+(10*60)) < time() ) //si el tiempo se vencio se cierra la sesion
{
$trama= array(
"ID"=>"'". $buf["ID"]. "'",
"FECHA_LOGOUT"=>"'". time(). "'"
);

actualizar_bdd( "LOG", $trama );
}
}
else //entonces esta conectado, se actualiza el tiempo de sesion
{
$trama= array(
"ID"=>"'". $buf["ID"]. "'",
"FECHA_LOGIN"=>"'". time(). "'"
);

actualizar_bdd( "LOG", $trama );
}

unset($trama);
$flag=0; //desactivamos bandera
}

unset($buf);
unset($log_cons);
}
?>
Páginas: 1 ... 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 [60] 61 62 63 64 65 66 67 68 69 70 71 72
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines