Foros del Web » Programando para Internet » PHP »

Como evitar multisesion!!!!

Estas en el tema de Como evitar multisesion!!!! en el foro de PHP en Foros del Web. buenas tardes, pues ahora mi duda que les quisiera plantear es la siguiente: Ya tengo mi sistema trabajando correctamente, PERO el problema es que un ...
  #1 (permalink)  
Antiguo 20/05/2009, 09:37
 
Fecha de Ingreso: mayo-2009
Mensajes: 2
Antigüedad: 14 años, 10 meses
Puntos: 0
Como evitar multisesion!!!!

buenas tardes, pues ahora mi duda que les quisiera plantear es la siguiente:
Ya tengo mi sistema trabajando correctamente, PERO el problema es que un usuario puede iniciar sesion simultaneamente, he intentado restringirlo mediante una variable de sesion, pero como al entrar tratar de entrar desde otra computadora con la misma sesion al ser validos los argumentos lo deja pasar
Mi pregunta es como hacer para que cuando el usuario este dentro de la sesion no pueda iniciar simultaneamente y nuevamente su sesion y si se puede hacer con la variable de sesion.
Mi codigo es el siguiente:

Código PHP:
<?php
session_start();
$_SESSION["existe"]='si';
$_SESSION['dentro']=0;//con esta sesion trato de hacer un 'flag' para ver que este dentro o no
If(isset($_POST["usuario"]) and isset($_POST["password"]) )
{
$usuario=$_POST["usuario"];
$pass=$_POST["password"];

$con=pg_connect("host=127.0.0.1 port=5432 user=postgres password=**** dbname=Curso");
if (!$con)
{
echo "<html>
<head>
<link href='curso/nihongo.css' rel='stylesheet' type='text/css'>
</head>
<body background='curso/menu/fondo.jpg' oncontextmenu='return false'>
<p class='titulo'>¡ERROR al conectarse a la base de datos.</p>
</body>
</html>";
}
else
{

$sql="SELECT c.usuario, c.nivel, i.nickname FROM comparacion c, id i WHERE c.usuario='$usuario' AND c.contrasena='$pass' AND c.usuario=i.usuario";
$query=pg_query($sql);

If(pg_num_rows($query)==1)
{
$row=pg_fetch_array($query);
$_SESSION["usuario"]=$row[0];
$_SESSION["usuario"]=$row[1];
$_SESSION["usuario"]=$usuario;
$_SESSION["nivel"]=$row[1];
$_SESSION["nickname"]=$row[2];


if ($_SESSION["nivel"]=='f')
{
header ('Location: curso/nihongo_aragon.php?modulo=inicio');
$_SESSION['dentro']++;//aumento mi variable para que sea 1 y se active cuando entre
exit;
}
elseif ($_SESSION["nivel"]=='t')
{
header ('Location: curso/sensei_aragon.php?modulo=inicio');
$_SESSION['dentro']++;
exit;
}
}
else
{
header ('Location: ../logerror.php');
exit;
}
}
}
?>
Y la pantella principal es:


Código PHP:
<?php
session_start();
$_SESSION['usuario'];
$_SESSION['nivel'];
$_SESSION['nickname'];
$_SESSION['dentro'];
include ("seguridad.php");
if (isset ($_SESSION['dentro'])>=1)
{
header ('Location: ../dentroer.php');
exit;
}
elseif($_SESSION['dentro']<=1)
{
echo "
<html>
<head>
<title>日本語 の オンライアン 教室。</title>
</head>
<body margin-top: 0px; oncontextmenu='return false' background='menu/fondo.jpg'>
<center>
<table width='1200' height='600'>
<tr>
<td width='1200' colspan='2' height='130' background='menu/cabecera.jpg'>

</td>
</tr>
<tr>
<td width='180' height='75' valign='top' name='menu'>";
include ("menu.php");
echo "
</td>
<td width='1020' height='525'>
<iframe src='Lecciones/".$_GET["modulo"].".php' height='100%' width='100%' scrolling='auto' frameborder='0' allowtransparency>
</iframe>
</td>
</tr>
</table>
</center>
</body>
</html>";
}
?>
Y al ser siempre 1 me lo deja pasar, espero me puedan ayudar.
De antemano gracias.
salu2!
  #2 (permalink)  
Antiguo 20/05/2009, 09:39
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Como evitar multisesion!!!!

Con $_SESSION no puedes hacer eso, necesitas llevar un control más fino de la sesiones, usando una base de datos, así guardas en un campo un "flag" que te indique si el usuario esta o no activo y a la hora de realizar el login, compruebas si el status es 1 es que esta en tu aplicación y le niegas el acceso.

Saludos.
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 16:49.