Foros del Web » Programando para Internet » PHP »

evitar sesiones

Estas en el tema de evitar sesiones en el foro de PHP en Foros del Web. Bien. Como ya saben algunos por ahí estoy realizando un Forum de Discusión. Bueno, cuando el usuario accede al Foro creo una sesión con nombre ...
  #1 (permalink)  
Antiguo 24/06/2004, 10:03
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
evitar sesiones

Bien. Como ya saben algunos por ahí estoy realizando un Forum de Discusión. Bueno, cuando el usuario accede al Foro creo una sesión con nombre "anonimo" y tipo "noidentificado". Esta es la función que he creado para dicho trabajo:
Código PHP:
function SessionInit($user="anonimo",$type="noidentificado"){
  
ini_set("session.use_cookies","0");
  
ini_set("session.use_trans_sid","1");
  
ini_set("session.name","rpmfsid");
  
ini_set("max_execution_time","600");
  
ini_set("session.save_path","sess/");
  
session_start();
  
$_SESSION['nombre'] = $user;
  
$_SESSION['tipo'] = $type;
 } 
luego en todas las páginas del Forum lo que hago es esto:
Código PHP:
if(!isset($_SESSION['nombre']) && !isset($_SESSION['tipo'])){
  
SessionInit();

mientras me mantengo navegando por el Forum todo bien pero no se porque razón cuando voy a la página principal, o sea, al index.php me vuelve a iniciar otra sesión nueva estando ya iniciada la anterior. Me ayudan ??
SAlu2
__________________
Ing. Reynier Pérez Mira
  #2 (permalink)  
Antiguo 24/06/2004, 11:22
Avatar de Kelpie  
Fecha de Ingreso: febrero-2002
Ubicación: NorthSpain
Mensajes: 609
Antigüedad: 22 años, 2 meses
Puntos: 8
¿Están todos tus archivos PHP en el mismo directorio? Las sesiones que se mantienen con cookies suelen ser sensibles a las rutas virtuales de los archivos. Una cookie de www.dominio.com/dir1/dir2 no tiene porqué ser recuperada desde www.dominio.com/dir1.
__________________
Kelpie

Última edición por Kelpie; 24/06/2004 a las 11:23
  #3 (permalink)  
Antiguo 24/06/2004, 11:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Haces uso de ini_set() indiscriminadamente .. NO todas las directivas que indicas se pueden o deben hacer por ini_set()

Ejemplo.
ini_set("max_execution_time","600");
se debe usar:
set_time_limit()

ini_set("session.save_path","sess/");
tienes la función:
session_save_path() para tal fin.

Para acceder a una variable de sesión .. -ANTES- debes de iniciar el uso de sesiones con la función session_start() .. NUNCA despues ..

Así que tendrías que sacar de esa función el session_start() que tienes (junto con los ini_set() que usas antes de esa función ).

Un saludo,
  #4 (permalink)  
Antiguo 24/06/2004, 19:05
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Pues que ya he hecho todo eso

Amigos:
Ya he hecho todos esos cambios de que me hablan. Miren ahora el código:
Código PHP:
function SessionInit($user="anonimo",$type="noidentificado"){
  
ini_set("session.use_cookies","0");
  
ini_set("session.use_trans_sid","1");
  
ini_set("session.name","rpmfsid");
  
$_SESSION['nombre'] = $user;
  
$_SESSION['tipo'] = $type;
 } 
y el session_start() lo ejecuto en todas las páginas al inicio. Ahora cuando hago login se supone que inicie una sesión con los datos de usuario y tipo del mismo para saber que puede o no hacer el mismo en el Forum a la hora de entrar al sistema de administracion o de publicar, editar y/o eliminar mensajes. Pues bien cuando entro los datos el action del form me va hacia la pagina actions.php. Lo que uso para identificar al usuario es esto:
Código PHP:
if(isset($_GET['action']) && $_GET['action']=="login" && isset($_GET['how']) && $_GET['how']=="asregistereduser"){
  if(
$_POST['automatically']==1){
   
$login $_POST['login'];
   
$pass md5($_POST['passwd']);
   
$value $login."::".$pass;
   
setcookie("rpmforos",$value,time()+3600,"sess/");
  }
  
$passwd_in_db md5($_POST['passwd']);
  
$query "SELECT * FROM rpmf_users WHERE login='".$_POST['login']."' AND password='".$passwd_in_db."' AND active<>0";
  
$result mysql_query($query) or die("No se ha podido ejecutar la consulta ".$query.". MySQL ha dicho: ".mysql_error());
  if(
mysql_num_rows($result)!=0){
   
CreateLogs("log","a",$query); // Esta función se encarga de crearme logs de consultas realizadas a la base de datos
   
$source mysql_fetch_assoc($result);
  }else{
   
CreateLogs("err","a",$query);
   
header("Location: index.php?msg=6");
  }
  if(
$source['login'] == $_POST['login'] && $source['password']==$passwd_in_db){
   
SessionInit($_POST['login'],$source['level']);
   
HeaderPage("5","index.php?user=".$_SESSION['nombre']."","Redireccionando ..."); // Esta función me redirecciona a la pagina indicada haciendo uso de los META REFRESH
  
}
 } 
pero eso no me crea la sesion ni la cookie y no se porque razón pasa esto. Es que hago algo mal o que es?

Salu2

PD: No se preocupen que todos van a formar parte de este Forum de Discusión. De hecho en la sección Acerca de RPM Foros hago alusión a la ayuda que me ha brindado Cluster, josemi y otros muchos.
__________________
Ing. Reynier Pérez Mira

Última edición por Reynier; 24/06/2004 a las 19:07
  #5 (permalink)  
Antiguo 25/06/2004, 09:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Estos "forzados de configuración" que haces .. DEBES! hacerlos antes de iniciar la sesión vía session_start() y en todos los scripts que uses sesiones.

Código PHP:
ini_set("session.use_cookies","0"); 
ini_set("session.use_trans_sid","1"); 
Y esta directiva:
Código PHP:
ini_set("session.name","rpmfsid"); 
debes usar:
Código PHP:
session_name("nombre_sesion"); // el nombre de la sesión es completamente opcional .. por defecto PHP le dá un nombre que lo define en su php.ini si es que no usas tu uno y lo "seteas" con esa función.
session_start(); 
Es decir . .primero se define el nombre de la sesión y luego se "inicia" o "continua" con la sesión activa de nombre (el que le distes).

Luego ... viendo como piensas propagar el SID (por el URL ya que desactivas las cookies para la propagación del SID) .. la directiva:

session.use_trans_sid = 1

NOOOO incrustra el SID en redireccionamientos tipo (tampoco lo hace en javascript: window.location .. window.open .. etc):

header("Location: index.php?msg=6");

ahí tendras que propagar el SID tu mismo a mano en tu código:

Código PHP:
header("Location: index.php?msg=6".SID); 
(SID es una constante .. no va entre comillas. También puedes obtener el SID usando: session_name().'='.session_id() )

Y .. fijate lo que hace "header("location") .. " redireciciona tu script a otra página, mejor dicho "le indicará" al navegador (cliente) que cambie la página .. pero eso simpre despues de que termine la ejecución de tu código .. así que dependiendo de los condicionales que hagas por el camino desde ese header() hasta el final .. así se comportará tu script. Lo ideal es usar:

header("Location: ...");
exit;

Exit para terminar la ejecución del escript ahí mismo. Y .. "OJO" que no es que despues de todo "header()" tenga que existir el "exit" sino sólo en el caso concreto de un redireccionamiento que es lo que hace la cabecera HTTP: Location.

-*----------------

Sobre cookies:
setcookie("rpmforos",$value,time()+3600,"sess/");

El parámetro que ahí indicas "sess/" no sé que piensas que va hacer .. Pero ese parámetro define el ambito de validez de esa cookie .. Si lo usas así sólo podrás obtener esa cookie que sea creada y accedida desde ese tal directorio "sess/". Ahí se usa normalmente "/" para que la cookie la puedas crear y leer desde cualquier página de tu sitio ..

-*-------------------------

Otro detalle:
Código PHP:
HeaderPage("5","index.php?user=".$_SESSION['nombre']."","Redireccionando ..."); // Esta función me redirecciona a la pagina indicada haciendo uso de los META REFRESH 
  

¿para que haces user=al valor de una variable de sesión y lo propagas por el URL? .. NO tiene sentido si ese valor es una variable de sesión .. Para eso están las sesiones. En tu index.php tendrías que usar directamente el valor de: $_SESSION['nombre'] en lugar de andar propagando un valor de una variable que YA tienes en la sesión.


Un saludo,
  #6 (permalink)  
Antiguo 26/06/2004, 18:50
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Pues bien

Cluster:
Debe ser que yo soy bruto y pico. Ahora lo he hecho de esta forma:
Código PHP:
function SessionInit($user="anonimo",$type="noidentificado"){
  
ini_set("session.use_cookies","0");
  
ini_set("session.use_trans_sid","1");

  
session_name("fddsid");
  
session_save_path("sess/");
  
set_time_limit(600);

  
$_SESSION['nombre'] = $user;
  
$_SESSION['tipo'] = $type;
 } 
y lo que hago en cada pagina es esto:
Código PHP:
if(!isset($_SESSION['nombre']) && !isset($_SESSION['tipo'])){
  
SessionInit();
 }
 
session_start(); 
y me crea las sesiones pero con tamaño 0 bytes. Es decir no contienen nada ... ¿por qué pasa esto?

Salu2
__________________
Ing. Reynier Pérez Mira
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 12:16.