Foros del Web » Programando para Internet » PHP »

Cierre de sesion por inactividad

Estas en el tema de Cierre de sesion por inactividad en el foro de PHP en Foros del Web. Hola como estan todos, espero que muy bien y saludos, tengo un pequeño problema alguien sabria alguna funcion en php que cierre la sesion de ...
  #1 (permalink)  
Antiguo 26/04/2012, 06:23
ruben_chirinos_1985
Invitado
 
Mensajes: n/a
Puntos:
Información Cierre de sesion por inactividad

Hola como estan todos, espero que muy bien y saludos, tengo un pequeño problema alguien sabria alguna funcion en php que cierre la sesion de mi sistema por inactividad, es decir si una persona q accede a mi sistema y dura un cierto tiempo sin mover el cursor o mejor dicho sin navegar los modulos q el sietma se cierre solo .

Espero q me puedan dar una manito con esto por fa se los agrdeceria mucho.
  #2 (permalink)  
Antiguo 26/04/2012, 06:33
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1.242
Antigüedad: 13 años, 5 meses
Puntos: 73
Respuesta: Cierre de sesion por inactividad

Edita el tiempo que duran las sesiones.

Sin mover el cursor, ya sería difícil, un session destroy y lo llamas por ajax con un setTimeout y si mueve el cursor, cleatTimeout.

¿Para que quieres hacer eso?
__________________
:)
  #3 (permalink)  
Antiguo 26/04/2012, 06:44
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Cierre de sesion por inactividad

En el PHP.ini se configura el tiempo de la session, Pero si queres que sea mas dinamica y a los 5 minutos que no navegas, automaticamente, la mejor opcion es Javascript ( a determinado tiempo te redirecciona a un logout)
__________________
Mono programando!
twitter.com/eguimariano
  #4 (permalink)  
Antiguo 26/04/2012, 06:48
ruben_chirinos_1985
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cierre de sesion por inactividad

Ah ok pero como seria ese proceso con java o php, lo q quiero es q cuando el usuario dure sin navegar los modulos mas nada, tendria q crear una tabla o como haria esa parte, en verdad me disculpan pero no entiendo mucho eso, por favor me podrian ayudar mas profundamente
  #5 (permalink)  
Antiguo 26/04/2012, 07:44
ruben_chirinos_1985
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cierre de sesion por inactividad

Hola de nuevo alguien me podria ayudar aqui trate de hacer estos codigos guiandome de un ejemplo para cerrar sesion por inactividad tengo este codigo

inactivo.php

<?php
session_start();
// Obtengo la fecha actual
$x = date("H i s m d Y",time());
// creo un arreglo para dividir horas,minutos,segundos, etc.
$fecha = explode(" ",$x);
//imprimo el arreglo
$fecha1=date("H:i:s d/m/Y ",mktime($fecha[0],$fecha[1],$fecha[2],$fecha[3],$fecha[4],$fecha[5]));

if($_SESSION["hora"]=="") {
// Hago la suma de los minutos
$fecha[1] = $fecha[1]+1;
// Asigno la fecha modificada a una nueva variable
$fecha2 = date("H:i:s d/m/Y ",mktime($fecha[0],$fecha[1],$fecha[2],$fecha[3],$fecha[4],$fecha[5]));

$_SESSION["hora"]=$fecha2;

}
else
{
if($fecha1>$_SESSION["hora"]) {

?>

<script type='text/javascript' language='javascript'>
alert('EXPIRO SU SESION')
document.location.href='../logout.php'
</script>
<?php
}
else
{
$fecha[1] = $fecha[1]+1;
// Asigno la fecha modificada a una nueva variable
$fecha2 = date("H:i:s d/m/Y ",mktime($fecha[0],$fecha[1],$fecha[2],$fecha[3],$fecha[4],$fecha[5]));
$_SESSION["hora"]=$fecha2;
}
}
?>

y en cada pagina coloco este

<?php
session_start();
if(isset($_SESSION['acceso'])) {
if ($_SESSION['acceso'] == "admin") {
include("inactivo.php");
?>

pero no me hace nada y tambien me sale este error

Notice: A session had already been started - ignoring session_start() in C:\wamp\www\Sistema Liceo\administrador\inactivo.php on line 2

cual seria el problema por favor espero q me puedan ayudar muchas gracias
  #6 (permalink)  
Antiguo 26/04/2012, 08:07
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Cierre de sesion por inactividad

session_start();
Solo se coloca una ves, el error te indica que en un archivo php( en este caso inactivo.php ) tiene un session_start(); debajo de otro.
Capas no sea visible por que estar realizando un include o require.
__________________
Mono programando!
twitter.com/eguimariano
  #7 (permalink)  
Antiguo 26/04/2012, 08:12
ruben_chirinos_1985
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cierre de sesion por inactividad

Ok hermano ya corregi el problema este es el codigo

inactivo.php

<?php
@session_start();
// Obtengo la fecha actual
$x = date("H i s m d Y",time());
// creo un arreglo para dividir horas,minutos,segundos, etc.
$fecha = explode(" ",$x);
//imprimo el arreglo
$fecha1=date("H:i:s d/m/Y ",mktime($fecha[0],$fecha[1],$fecha[2],$fecha[3],$fecha[4],$fecha[5]));

if(@$_SESSION["hora"]=="") {
// Hago la suma de los minutos
$fecha[1] = $fecha[1]+1;
// Asigno la fecha modificada a una nueva variable
$fecha2 = date("H:i:s d/m/Y ",mktime($fecha[0],$fecha[1],$fecha[2],$fecha[3],$fecha[4],$fecha[5]));

$_SESSION["hora"]=$fecha2;

}
else
{
if($fecha1>$_SESSION["hora"]) {

?>

<script type='text/javascript' language='javascript'>
alert('EXPIRO SU SESION')
document.location.href='../logout.php'
</script>
<?php
}
else
{
$fecha[1] = $fecha[1]+1;
// Asigno la fecha modificada a una nueva variable
$fecha2 = date("H:i:s d/m/Y ",mktime($fecha[0],$fecha[1],$fecha[2],$fecha[3],$fecha[4],$fecha[5]));
$_SESSION["hora"]=$fecha2;
}
}
?>

y este es el q coloco en cada pagina

include("inactivo.php");

como podria adaptar a inactivo.php en un archivo q se llama funciones es decir como pouedo hacerlo como una funcion para poder llamarlo asi

include_once('funciones_basicas.php');

por fa espero q me entiendas y gracias amigo
  #8 (permalink)  
Antiguo 26/04/2012, 09:40
ruben_chirinos_1985
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cierre de sesion por inactividad

Buenas de nuevo la verdad no entioendo por mas q intento no puedo adaptar estos codigods como una funcion para poder guardarla en un archivo q tengo de funciones, por favor alguien me podria decir como hacer esto se los agradeceria mucho de antemano mil gracias.

Espero su respuesta por favor gracias
  #9 (permalink)  
Antiguo 26/04/2012, 09:59
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Cierre de sesion por inactividad

Deberias, adaptar inactivo.php al archivo que controla la session, y el codigo es medio complejo, para el procedimiento.
Que te parece algo como esto:
Código PHP:
<?php 
session_start
();
if(!isset(
$_SESSION['usuario'])){// Esta logeado?.
 
header("Location: logout.php"); 
}
// La variable $_SESSION['usuario'] es un ejemplo.

//Verifico el tiempo si esta seteado, caso contrario lo seteo.
if(isset($_SESSION['time'])){
 
$tiempo $_SESSION['time'];
}else{
 
$tiempo strtotime(date("Y-m-d H:i:s"));
}

$inactividad =3600;   //Exprecion en segundos.

$actual =  strtotime(date("Y-m-d H:i:s"));

if( (
$actual-$tiempo) >= $inactividad){
 
header("Location: logout.php");
 
// En caso que este sea mayor del tiempo seteado lo deslogea.
}else{
 
$_SESSION['time'] =$actual;
}
?>
EL mismo codigo optimizado:
Código PHP:
<?php 
session_start
();
if(!isset(
$_SESSION['usuario']))header("Location: logout.php"); 
$tiempo = (isset($_SESSION['time'])) ? $_SESSION['time'] : strtotime(date("Y-m-d H:i:s"));
$actual =  strtotime(date("Y-m-d H:i:s"));
((
$actual-$tiempo) >= 3600) ? header("Location: logout.php") : $_SESSION['time'] =$actual;
?>
__________________
Mono programando!
twitter.com/eguimariano
  #10 (permalink)  
Antiguo 26/04/2012, 10:38
ruben_chirinos_1985
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cierre de sesion por inactividad

Disculpa quieres decir q ese lo puedo colcoar como tu me acabas de arreglarlo en el archivo q tengo para consultar el loogue es decir el ingreso.php
  #11 (permalink)  
Antiguo 26/04/2012, 10:40
ruben_chirinos_1985
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cierre de sesion por inactividad

La verdad siculpam,e pero no entiendo esa parteese codigo q tu me acabas de arreglar iria en el mismo inactivo.php o en el ingreso.php q es donde realiza la consulta para ver si existe el usuario y clave
  #12 (permalink)  
Antiguo 26/04/2012, 10:50
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Cierre de sesion por inactividad

UFFFFFF

Cuando logea el usuario ( verificias usuario y contraseña ).
Realisas un session_start();
y en general, se SETEA una variable de la session para verificar que este OK,
Suele ser:

$_SESSION['usuario']= nombre_del_usuario;

Luego en todas las HOJAS antes de cualquier codigo, pegas un include como este:
Código PHP:
Ver original
  1. <?php
  2. include('seguridad.php');
  3. //Todos los codigo que quieras....
Y el contenido de seguridad.php es el codigo que anterior mente mensione.

El codigo que te FACILITE, verifica que la session este autentificada y el tiempo de inactividad.

Espero ser claro.
__________________
Mono programando!
twitter.com/eguimariano
  #13 (permalink)  
Antiguo 26/04/2012, 11:17
ruben_chirinos_1985
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cierre de sesion por inactividad

Hola de neuvo la verdad noe ntendi nada de lo q me dijsite, en verdad disculpame, pero me podrias explicar mas exacto, es q soy nuevo en php, como te dije tengo un archivo de ingreso y de acceso el usuario primero pasa por el archivo de acceso y luego de redirige a ingreso en todas mis paginas tengo asi

<?php
session_start();
if(isset($_SESSION['acceso'])) {
if ($_SESSION['acceso'] == "admin") {
include("inactivo.php");
?>

como podria adaptar lo q me dijiste tu la verdad mo entoedno nada hermano y en verdad muchas gracias
  #14 (permalink)  
Antiguo 26/04/2012, 11:42
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Cierre de sesion por inactividad

Remplazar esto:
Código PHP:
<?php 
session_start
(); 
if(isset(
$_SESSION['acceso'])) { 
if (
$_SESSION['acceso'] == "admin") {
 include(
"inactivo.php");
 
?>
Por:
Código PHP:
<?php  
session_start
(); 
if(!isset(
$_SESSION['acceso']))header("Location: login.php");  
$tiempo = (isset($_SESSION['time'])) ? $_SESSION['time'] : strtotime(date("Y-m-d H:i:s"));
 
$actual =  strtotime(date("Y-m-d H:i:s")); 
((
$actual-$tiempo) >= 3600) ? header("Location: logout.php") : $_SESSION['time'] =$actual;
 
?>
__________________
Mono programando!
twitter.com/eguimariano
  #15 (permalink)  
Antiguo 26/04/2012, 11:50
ruben_chirinos_1985
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cierre de sesion por inactividad

Ah ok dejame adaptarlo para ver y te aviso si me funciona amigo, en verdad muchas gracias
  #16 (permalink)  
Antiguo 22/01/2013, 14:21
 
Fecha de Ingreso: agosto-2012
Ubicación: México
Mensajes: 106
Antigüedad: 11 años, 8 meses
Puntos: 6
Respuesta: Cierre de sesion por inactividad

Una pregunta, ese codigo asi,¿ lo que hace es destruir la sesion por inactividad en un tiempo definido? Por que no entiendo como PHP sabe que el usuario esta INACTIVO, mas bien pareciera que le asignas un tiempo de vida a la SESION, ya sea ACTIVO ó INACTIVO, alguien podria explicarme como funciona eso?, yo necesito deslogear al usuario y redirigirlo por INACTIVIDAD, y tengo este código, pero solo funciona cuando ya paso el tiempo que le definio y actualizo la pagina o le doy F5 para refrescarla, entonces me redirecciona y me deslogea...
Código PHP:
Ver original
  1. $fechaOld= $_SESSION["ultimoAcceso"];
  2.     $curDate = date("Y-n-j H:i:s");
  3.     $tiempo_transcurrido = (strtotime( $curDate)-strtotime($fechaOld));
  4.     if($tiempo_transcurrido>=15) { //comparamos el tiempo y verificamos si pasaron 15 minutos de inactivdad
  5.      session_unset();
  6.      session_destroy(); // destruimos la sesión
  7. //este solo me funciona cuando actualizo la pagina o le doy F5 para refrescarla
  8.      header("Location:index.html"); //enviamos al usuario a la página principal
  9.      
  10.     }else {       //sino, actualizo la fecha de la sesión
  11.     $_SESSION["ultimoAcceso"] =  $curDate;
  12.    }
la variable de sesion ultimoAcceso esta previamente definida en otro script...
  #17 (permalink)  
Antiguo 22/01/2013, 14:32
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cierre de sesion por inactividad

lo que hace es comparar la hora del ultimo acceso guardado en la session con la hora exacta del momento que refrescas si es superior a 15 minutos te destruye la session y si no la vuelve a aztualizar

Última edición por webankenovi; 22/01/2013 a las 14:38
  #18 (permalink)  
Antiguo 22/01/2013, 16:28
 
Fecha de Ingreso: agosto-2012
Ubicación: México
Mensajes: 106
Antigüedad: 11 años, 8 meses
Puntos: 6
Respuesta: Cierre de sesion por inactividad

Cita:
Iniciado por webankenovi Ver Mensaje
lo que hace es comparar la hora del ultimo acceso guardado en la session con la hora exacta del momento que refrescas si es superior a 15 minutos te destruye la session y si no la vuelve a aztualizar
Entonces, en realidad no es por actividad verdad?? Seria mas bien asignarle un tiempo de vida a esta sesion... creo que no me queda de otra que hacerlo de esta manera, aunque quisiera aunque fuera avisarle al usuario unos 5 min antes de que su sesion expire.
  #19 (permalink)  
Antiguo 22/01/2013, 22:15
ruben_chirinos_1985
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cierre de sesion por inactividad

hola mira si quieres despues te paso un script completo donde se consulta a la base de datos el tiempo de sesion q le des al usuario y lo saca del sistema por inactividad ya q yo logre arreglar el q ves en el foro y otro mejor q un amigo mio me lo arreglo mucho mejor mi correo [email protected]
  #20 (permalink)  
Antiguo 23/01/2013, 12:55
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cierre de sesion por inactividad

Cita:
Iniciado por art_rockerd Ver Mensaje
Entonces, en realidad no es por actividad verdad?? Seria mas bien asignarle un tiempo de vida a esta sesion... creo que no me queda de otra que hacerlo de esta manera, aunque quisiera aunque fuera avisarle al usuario unos 5 min antes de que su sesion expire.
Ese script hace exactamente igual que en forosdelweb , mira abre tu session aqui en la web y deja la session abierta una hora sin aztualizarla ni nada y despues de la hora aztualiza veras como te han deslogueado , creo que con una hora es suficiente si no prueba mas .

lo de avisar lo veo muy dificil con php imaginate que abres tu session la dejas abierta y te vas a jugar al futbol y como vas a ejecutar el codigo php sin que halla una peticion al servidor ¿?

ahora si quieres que se desloguee despues de un tiempo sin que el usuario aztualize nada es imposible a no ser que hagas un refresh cada 30 minutos por ejemplo por si dejaran la session abierta y la pagina claro , xq si cierra el navegador ¿? puedes hacer un script que verifique la hora de las ultimas visitas y las superiores a una hora los deslogueas , deberas guardar las visitas en la bd , y ejecutar ese script cada cierto tiempo o por ejemplo ponerlo en todas las paginas y cuando un usuario visita la pagina lo ejecute

Última edición por webankenovi; 23/01/2013 a las 14:53

Etiquetas: cierre, inactividad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:09.