Estoy empezando con las sesiones de PHP, y pensaba que más o menos las entendía, pero ahora se me plantean varias dudas. ¿Como sé si las sesiones se pasan por cookies o por la URL? Yo en mis links no pongo en ningun sitio el Id de la sesión, y he comprobado que si deshabilito las cookies en el navegador, no funciona. Por lo que entiendo que en mi caso se pasan por cookies.
A mi me interesaría pasarlas por la URL, para evitar que el usuario tenga que tener obligatoriamente las cookies habilitadas. ¿Como lo hago? He leido que hay una constante predefinida, SID, que tiene el Id de la sesión, y que si habilito cierta opción del archivo de configuración se puede pasar automáticamente. Sin embargo a mi no me pasan.
He hecho un echo de esta constante y nunca tiene un valor, así que decidí crearla yo con un define y la función id_session, y pasarla yo manualmente por la URL. Pero me sigue pasando lo mismo, si deshabilito las cookies, tampoco funciona.
he hecho un phpinfo, y tengo estos valores:
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid On On
¿No se supone que el Id se pasa por defecto?? No lo entiendo!!
os explico un poco como es mi sitio, por si ayuda.... Para acceder a ciertas páginas es necesario que los usuarios se autentiquen con Login y Password. Lo hago mediante un formulario, y si son correctos creo unas variables de sesión, almacenando estos valores.
Después en las páginas que necesito estos datos, abro una sesión, y trabajo con las variables.
os pongo el código que tengo: (En comentarios he puesto la definición del SID, y el paso del mismo...)
En este script creo la sesión:
Código:
Y en este accedo a los valores://Usuario válido. //Se define una sesión. session_name('proyecto'); session_start(); //echo 'La sesión actual es: '.session_id(); //define('SID', session_id()); //Se crea una variable de sesión para indicar que el usuario ha pasado el proceso de autenticación. $_SESSION['autentificado'] = 'SI'; //Se crean varias variables de sesión con datos acerca del usuario. $row = mysql_fetch_array($rs); $_SESSION['login'] = $row['Login']; $_SESSION['password'] = $row['Password']; $_SESSION['id_personal'] = $row['Id']; $_SESSION['perfil'] = $row['Perfil']; //header ("Location: dentro.php?SID=".SID); header ("Location: dentro.php); exit();
dentro.php
Código:
<?php /* Este script es el que se encarga de mostrar todos los enlaces que tiene la aplicación. Para ello se divide la página en dos frames. En el superior se pondrán todos los enlaces, y en el inferior se irá visualizando cada uno de ellos. Sólo es accesible para usuarios registrados. */ //Se lee el SID de la sesión en curso //define ('SID', $_GET['SID']); //Se comprueba que el usuario ha pasado por el proceso de autenticación include('seguridad.php'); //Se incluye el fichero de la libreria donde están las funciones que se utilizan require('../libreria/varios/var_paginas_html.php'); ?> <?php $titulo = 'dentro.php'; var_hacer_encabezado_html($titulo); ?> frames...<body> </body> </noframes></html>
seguridad.php
Código:
Muchas gracias a todos de antemano, y a ver si alguien me puede abrir los ojos un poco!!!! <?php /* este script se encarga de implementar la capa de seguridad en todas aquellas páginas que sólo son para usuarios registrados. Comprueba que el usuario haya pasado por el formulario en que debe autenticarse y que los datos que ha introducido son correctos. */ //Se retoma la sesión session_name('proyecto'); session_start(); //Se comprueba que el usuario está ya autentificado if($_SESSION['autentificado'] != 'SI') //Si el usuario no ha pasado por el proceso de autenticación se le reenvía a esta página y además se sale del script para que no se visualize nada de la página de acceso restringido. { header("Location: entrar.php"); exit(); } ?>