Foros del Web » Programando para Internet » PHP »

como evitar q me genere un bucle de sesiones....

Estas en el tema de como evitar q me genere un bucle de sesiones.... en el foro de PHP en Foros del Web. Hola a todos, esperando esten bien, les comento mi probleama: estoy trabajando con iis y se supone que cuando trabajo con una sesion la inicio ...
  #1 (permalink)  
Antiguo 17/10/2006, 10:23
 
Fecha de Ingreso: abril-2005
Mensajes: 124
Antigüedad: 19 años
Puntos: 0
como evitar q me genere un bucle de sesiones....

Hola a todos, esperando esten bien, les comento mi probleama:

estoy trabajando con iis y se supone que cuando trabajo con una sesion la inicio desde mi programa y no de forma a utomatica en el php.ini. El problema es que a la hora de crear dicha sesion en mi carpeta tem me debe de generar solo una y me esta generando 22 de un solo golpe y a la hora de entrar a mi archivo, checo si la sesion existe y es ahi donde tengo problemas porque no encuentra la sesion creada....

he modificado el php.ini y no me da resultado. Si alguien de ustedes sabe ago sobre esto, mucho le agradeceria la ayuda.

De antemano gracias.....
  #2 (permalink)  
Antiguo 17/10/2006, 10:39
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
jeje pues postea el código en donde estas usando sesiones. De esta manera se te puede brindar una mejor solución.

Saludillos.
  #3 (permalink)  
Antiguo 23/10/2006, 10:48
 
Fecha de Ingreso: abril-2005
Mensajes: 124
Antigüedad: 19 años
Puntos: 0
perdon mauled, estoy ocupando el programa de cluster sobre las sesiones, primero escribo el usuario y password, los envio por el metodo post, los cacho con este programa, si coinciden con los parametros que tengo en la base de datos, creo mi sesion, es aqui donde me genera el bucle de sesiones(para ser exactos 27)

----programa valida.php-----

<?
// Descripción:
// Gestión de Páginas restringidas a Usuarios, con nivel de acceso
// y gestión de errores en el Login
// + administración de usuarios (altas/bajas/modificaciones)
//

// Motor autentificación usuarios.

// Cargar datos conexion y otras variables.
require ("../autentifica/aut_config.inc.php");


// chequear página que lo llama para devolver errores a dicha página.

$url = explode("?",$_SERVER['HTTP_REFERER']);
$pag_referida=$url[0];
$redir=$pag_referida;
// chequear si se llama directo al script.
if ($_SERVER['HTTP_REFERER'] == ""){
die ("Error cod.:1 - Acceso incorrecto!");
exit;
}


// Chequeamos si se está autentificandose un usuario por medio del formulario
if (isset($_POST['user']) && isset($_POST['pass'])) {

// Conexión base de datos.
// si no se puede conectar a la BD salimos del scrip con error 0 y
// redireccionamos a la pagina de error.
$db_conexion= mysql_connect("$sql_host", "$sql_usuario", "$sql_pass") or die(header ("Location: $redir?error_login=0"));
mysql_select_db("$sql_db");

// realizamos la consulta a la BD para chequear datos del Usuario.
$usuario_consulta = mysql_query("SELECT ID,usuario,pass,nivel_acceso FROM $sql_tabla WHERE usuario='".$_POST['user']."'") or die(header ("Location: $redir?error_login=1"));

// miramos el total de resultado de la consulta (si es distinto de 0 es que existe el usuario)
if (mysql_num_rows($usuario_consulta) != 0) {

// eliminamos barras invertidas y dobles en sencillas
$login = stripslashes($_POST['user']);
// encriptamos el password en formato md5 irreversible.
$password =md5($_POST['pass']);
//modoficado por el chch $password = md5($_POST['pass']);

// almacenamos datos del Usuario en un array para empezar a chequear.
$usuario_datos = mysql_fetch_array($usuario_consulta);

// liberamos la memoria usada por la consulta, ya que tenemos estos datos en el Array.
mysql_free_result($usuario_consulta);
// cerramos la Base de dtos.
mysql_close($db_conexion);

// chequeamos el nombre del usuario otra vez contrastandolo con la BD
// esta vez sin barras invertidas, etc ...
// si no es correcto, salimos del script con error 4 y redireccionamos a la
// página de error.
if ($login != $usuario_datos['usuario']) {
Header ("Location: $redir?error_login=4");
exit;}

// si el password no es correcto ..
// salimos del script con error 3 y redireccinamos hacia la página de error
if ($password != $usuario_datos['pass']) {
Header ("Location: $redir?error_login=3");
exit;}

// Paranoia: destruimos las variables login y password usadas
unset($login);
unset ($password);

// En este punto, el usuario ya esta validado.
// Grabamos los datos del usuario en una sesion.

// le damos un mobre a la sesion.
session_name($usuarios_sesion);
// incia sessiones
session_start();

// Paranoia: decimos al navegador que no "cachee" esta página.
session_cache_limiter('nocache,private');

// Asignamos variables de sesión con datos del Usuario para el uso en el
// resto de páginas autentificadas.

// definimos usuarios_id como IDentificador del usuario en nuestra BD de usuarios
$_SESSION['usuario_id']=$usuario_datos['ID'];

// definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios
$_SESSION['usuario_nivel']=$usuario_datos['nivel_acceso'];

//definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios
$_SESSION['usuario_login']=$usuario_datos['usuario'];

//definimos usuario_password con el password del usuario de la sesión actual (formato md5 encriptado)
$_SESSION['usuario_password']=$usuario_datos['pass'];


// Hacemos una llamada a si mismo (scritp) para que queden disponibles
// las variables de session en el array asociado $HTTP_...
$pag=$_SERVER['PHP_SELF'];
Header ("Location: $pag?");
exit;

} else {
// si no esta el nombre de usuario en la BD o el password ..
// se devuelve a pagina q lo llamo con error
Header ("Location: $redir?error_login=2");
exit;}
} else {

// -------- Chequear sesión existe -------

// usamos la sesion de nombre definido.
session_name($usuarios_sesion);
// Iniciamos el uso de sesiones
session_start();

// Chequeamos si estan creadas las variables de sesión de identificación del usuario,
// El caso mas comun es el de una vez "matado" la sesion se intenta volver hacia atras
// con el navegador.

if (!isset($_SESSION['usuario_login']) && !isset($_SESSION['usuario_password'])){
// Borramos la sesion creada por el inicio de session anterior
session_destroy();
die ("Error cod.: 2 - Acceso incorrecto!");
exit;
}
}
?>
  #4 (permalink)  
Antiguo 23/10/2006, 11:15
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Deberías indicar -cómo- estás usando Autentificator (más que su código original .. para eso es mejor remitir a su fuente oficial: http://php.cluster-web.com/autentificator)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 23/10/2006, 11:48
 
Fecha de Ingreso: abril-2005
Mensajes: 124
Antigüedad: 19 años
Puntos: 0
A ver si entendi cluster.....tengo un php llamado registro.php donde anoto el usuario y password. una vez teclados mando llamar index.php, y es aqui donde veo que el archivo temporal de las sesiones en lugar de tener una sola sesion, me ha generado 27 y entonces me manda error de que no se puede mostrar la pagina, si recargo la pagina, me manda accceso incorrecto(el error ya es parte de autentifica), todo esto en el IIS, en linux funciona muy bien...Gracias

index.php
<?
require("../autentifica/aut_verifica.inc.php");
$nivel_acceso=2; // Nivel de acceso para esta página.
if ($nivel_acceso > $_SESSION['usuario_nivel']){
header ("Location: $redir?error_login=5");
exit;
}
?>
<html>
<head>
<title>Identificación y Monitoreo de Ondas Tropicales</title>
</head>
<FRAMESET rows="8%,92%" cols="*" frameborder="yes" bordercolor="#056084">
<FRAME NAME="principal" SRC="encabezado.htm" SCROLLING="NO" NORESIZE>
<FRAMESET rows="*" cols="15%,85%" frameborder="yes" bordercolor="#056084">
<FRAME NAME="indice" SRC="o.php" NORESIZE>
<FRAME NAME="fotos" SRC="limpia.php">
</FRAMESET>
</FRAMESET>
<noframes></noframes>
</html>
  #6 (permalink)  
Antiguo 23/10/2006, 11:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No sé por qué ese n° mágico de sesiones abiertas .. Mira que datos contienen (son datos en texto plano serializados) ...

Lo que se observa es que usas un montón de frames .. si en cada uno abres un script PHP donde incluye la llamada a sesiones (sessin_start() vía Autentificator o no .. ) es normal que si no se llega a propagar el SID (Identificador único de sesión) .. se creen N archivos de sesión .. tantos como archivos lo incluyan.

Tu usas? :
require("../autentifica/aut_verifica.inc.php");
(que principalmente hace un session_start())

En tus scritps que llamas en el frame-set?

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 23/10/2006, 12:27
 
Fecha de Ingreso: abril-2005
Mensajes: 124
Antigüedad: 19 años
Puntos: 0
el contenido de la sesion es este, en todas:
usuario_id|s:1:"1";usuario_nivel|s:1:"2";usuario_l ogin|s:5:"Admin";usuario_password|s:32:"21232f297a 57a5a743894a0e4a801fc3";

y si ocupo el require("../autentifica/aut_verifica.inc.php"); por ejemplo el o.php es una serie de ligas a una base de datos donde realizas consultas, modificaciones, etc. y cada una de ellas tiene el require. Como saber que efectivamente a la hora de crear por primera vez mi sesion, a la hora de entrar a index.php, esta exista. Para comprobar que realmente no este pasando lo que dices, que pierde el sid y por lo tanto cada vez que llama a un archivo donde tengo el require no encuentra el sid y me crea otra sesion.

1.-En caso de pasar todo lo anterior que me aconsejas que podria hacer para evitar ese problema...y por fin acupar mis sesiones en IIS?
2.-porque en linux teniendo lo mismo, solo me genera una sesion desde que entro hasta que salgo?

Última edición por jgrc; 23/10/2006 a las 12:39
  #8 (permalink)  
Antiguo 23/10/2006, 13:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
1 y 2 .. Realmente no lo sé, habría que evaluar cuantas "peticiones" se hacen al servidor . . ya se ven unas cuentas (tantas como archivos llamas en tu frame-set ..

Supongo que en todos los scripts involucrados que llamas en tu frame-set .. los valores de la sesión son los mismos y su SID (o session_id()) .. verifica eso imprimiendo dicho dato en todos tus scripts involucrados.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 25/10/2006, 14:41
 
Fecha de Ingreso: abril-2005
Mensajes: 124
Antigüedad: 19 años
Puntos: 0
bueno aqui va mi solucion...
Existen dos opciones para instalar PHP, una es el binario CGI de PHP (php.exe) y la otra el módulo ISAPI, con el modo cgi, es donde me daba problemas con mis sesiones, asi que opte por probar con el modulo de ISAPI, en este caso en el iis le dige que mis programas de php corrieran con la libreria php5isapi.dll y listo mis sesiones funcionan maravillosamente.

Gracias a todos por su apoyo.

pregunta: Alguien cree poder explicar la diferencia que existe entre isapi y cgi, perdon pero aun no me queda del todo claro.
  #10 (permalink)  
Antiguo 25/10/2006, 14:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por jgrc Ver Mensaje
bueno aqui va mi solucion...
Existen dos opciones para instalar PHP, una es el binario CGI de PHP (php.exe) y la otra el módulo ISAPI, con el modo cgi, es donde me daba problemas con mis sesiones, asi que opte por probar con el modulo de ISAPI, en este caso en el iis le dige que mis programas de php corrieran con la libreria php5isapi.dll y listo mis sesiones funcionan maravillosamente.

Gracias a todos por su apoyo.

pregunta: Alguien cree poder explicar la diferencia que existe entre isapi y cgi, perdon pero aun no me queda del todo claro.
mm En general como CGI PHP "lenvanta" una instancia del interprete PHP por cada script que se pide a ejecutar .. Esto no sé que tanto lo entenderá el uso de sesiones como para crear un archivo físicamente en el servidor .. pero en cierta manera es entendible por qué PHP en modo CGI gestiona todo proceso por -separado- . En modo CGI cada vez que tu script termina su ejecución .. el interprete de PHP se elimina de "memoria" del servidor ..

(aunque realmente esto nunca se me hubiera ocurrido .. )

En modo "ISAPI" lo que hace PHP es ejecutarse UNA VEZ al inicio de tu servidor HTTP y se coloca en modo "residente" a la espera de que se llame a ejecutar un script PHP .. ahí se inicia un nuevo proceso en "Memoria" pero compartido con el resto que se puedan pedir. El interprete de PHP siempre está activo ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 25/10/2006, 15:28
 
Fecha de Ingreso: abril-2005
Mensajes: 124
Antigüedad: 19 años
Puntos: 0
orale.....
gracias a todos nuevamente y a ti cluster por la explicacion
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 23:13.