¿Por qué mis variables de sesión no funcionan entre sitios?

¿Por qué mis variables de sesión no funcionan entre sitios?

Obviamente los estoy configurando en mi código, de lo contrario, iniciar sesión como administrador no redirigiría a la página de administración.

Si alguien tiene sugerencias sobre cuál es el problema, por qué las variables $_SESSION no se guardan, etc., estaría agradecido.

Usando IIS 7 y FastCGI, php.ini tiene los valores predeterminados.

Ejemplo de código:

<?php session_start();
/* Include database config file. */
include("db_config.php");
/* If POST request do code. */
if ($_SERVER['REQUEST_METHOD']=='POST') 
{
/* Set variables for form fields. */
$username=$_POST["username"];
$password=$_POST["password"];
/* Queries on login. */
$query_params=array($username,$password);
$query="SELECT * FROM users WHERE username=? AND password=?";
$qresults=sqlsrv_query($dbconnect,$query,$query_params);
$permission_q="SELECT permission FROM users WHERE username=? AND password=?";
$permission_qr=sqlsrv_query($dbconnect,$permission_q,$query_params);
$firstname_q="SELECT firstname FROM users WHERE username=? AND password=?";
$firstname_qr=sqlsrv_query($dbconnect,$firstname_q,$query_params);
$lastname_q="SELECT lastname FROM users WHERE username=? AND password=?";
$lastname_qr=sqlsrv_query($dbconnect,$lastname_q,$query_params);
/* If any queries fail then kill script. */
if(sqlsrv_fetch($firstname_qr)===false)
{
die("Firstname couldn't be verified, terminated connection.");
}
$firstname=sqlsrv_get_field($firstname_qr,0);
if(sqlsrv_fetch($lastname_qr)===false)
{
die("Lastname couldn't be verified, terminated connection.");
}
$lastname=sqlsrv_get_field($lastname_qr,0);
if(sqlsrv_fetch($permission_qr)===false)
{
die("Permissions could not be verified, terminating connection.");
}
$permissions=sqlsrv_get_field($permission_qr,0);
/* If the username and password query results exist then do code. */
if(isset($qresults))
{
/* Number of rows is fetch array of username and pass results. */
$num_rows=sqlsrv_fetch_array($qresults,SQLSRV_FETCH_NUMERIC);
/* If rows is not null or is set then do code. */
if($num_rows!=null)
{
$_SESSION['username']=$username;
$_SESSION['firstname']=$firstname;
$_SESSION['lastname']=$lastname;
$_SESSION['permissions']=$permissions;
/* If permissions is equivelant to admin send to admin page. */
if($_SESSION['permissions']==="admin")
{

session_write_close();
echo '<meta http-equiv="refresh" content="0; url=./content/admin_dash.php">';
die();
//endif
}
else
{

session_write_close();
echo '<meta http-equiv="refresh" content="0; url=./content/user_dash.php">';
die();
//endelse
}
//endif
}
else
{
//elseif num_rows not true
echo "Invalid Login.<br/>Your credentials did not match or there was an error.<br/>";
$_SESSION['username'] = '';
if(sqlsrv_errors(SQLSRV_ERR_ALL)==null)
{
echo "No errors detected.";
//endif
}
else
{
echo "Errors detected:<br/>";
print_r( sqlsrv_errors(SQLSRV_ERR_ALL));
//endelse
}
//endelse
}
//endif
}
else
{
die("Error with query. Contact your system admin.");
//endelse
}
//endif
}
else
{
die("Request was not POST. Please use login page.");
//endelse
}
?>

preguntado el 03 de mayo de 12 a las 18:05

¿Qué quiere decir con "sitio cruzado"? -

Después de la redirección a otra página. -

Error de novato aquí, C:\windows\temp NO tenía iusr e iis_usrs como capaces de modificar el archivo en la pestaña de seguridad de propiedades de la carpeta, por lo que las sesiones eran imposibles. -

4 Respuestas

Porque no es así como funcionan (típicamente) las sesiones. Una cookie de sesión almacena solo una ID de sesión. la información real in la sesión solo se almacena en el servidor.

contestado el 03 de mayo de 12 a las 18:05

La cookie solo permite que PHP busque las variables de sesión que están almacenadas en su servidor web (ya sea como un archivo o en una base de datos). Agrega seguridad adicional ya que las personas no pueden olfatear los valores de los datos y tampoco requiere que las cookies se vuelvan muy largas.

contestado el 03 de mayo de 12 a las 18:05

Pregunta corregida, ¿ve algo incorrecto en mi código que estropearía las variables de sesión? - Evento_Horizonte

Como se mencionó anteriormente, la cookie de sesión solo almacena la identificación de la sesión.

Si desea guardar en una cookie con contenido personalizado, consulte esta publicación. http://davidwalsh.name/php-cookies

contestado el 03 de mayo de 12 a las 18:05

Pregunta corregida, ¿ve algo incorrecto en mi código que estropearía las variables de sesión? - Evento_Horizonte

Encontré el problema, los permisos de la carpeta C:\Windows\Temp no se habían configurado para aceptar del usuario IIS_IUSRS, lo que impedía que IIS guardara cualquier cosa en la carpeta Temp, incluidas las sesiones.

Respondido el 05 de junio de 12 a las 18:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.