我正在执行登录,并且用户类型是一个不同的对象,代码中的那个对象查询它是否工作正常,使用 var_dump 到我使用它的会话变量并且它工作正常,但是当我发送它时没有更长的作品。
登录.php
<?php
session_start();
require_once '../Modelo/PDOConex.php';
if((!$nameUser = trim($_POST['user'])) || (!$password = md5(trim($_POST['pass']) ) ) ){
header('location:../');
}
try{
$stmt = $db_con->prepare("SELECT
idUsuarios,
Cuenta,
Contra
FROM
Usuarios
WHERE
Cuenta=:usuario");
$stmt->execute(array(":usuario"=>$nameUser));
$fila = $stmt->fetch(PDO::FETCH_ASSOC);
if($fila['Contra']==$password){ //Credenciales correctas
require_once 'Log/getTipo.php';
switch (getTipo($fila['idUsuarios'], $db_con)){
case 'Administrativo':
require_once 'Log/LoginAdmin.php';
$_SESION['Usuario'] = serialize(logAdmin($fila['idUsuarios'], $db_con));
$_SESION['Tipo']= 'Administrativo';
break;
case 'Docente':
require_once 'Log/LoginDocente.php';
$_SESION['Usuario'] = logDocente($fila['idUsuarios']);
$_SESION['Tipo']= 'Docente';
break;
case 'Estudiante':
require_once 'Log/LoginEstud.php';
$_SESION['Usuario'] = logEst($fila['idUsuarios']);
$_SESION['Tipo']= 'Estudiante';
break;
case 'Acudiente':
require_once 'Log/LoginAcud.php';
$_SESION['Usuario'] = logAcud($fila['idUsuarios']);
$_SESION['Tipo']= 'Acudiente';
break;
default:
echo "0";
break;
}
}else{
echo '0'; // Credenciales incorrectas
}
}catch(PDOException $e){
echo $e->getMessage();
}
?>
索引.php
<?php
require_once 'Controlador/Usuarios/Acudientes.php';
require_once 'Controlador/Usuarios/Administrativos.php';
require_once 'Controlador/Usuarios/Docentes.php';
require_once 'Controlador/Usuarios/Estudiantes.php';
session_start();
//错误没有接收到对象,这里 var_dump 打印 false...
$_SESSION['Usuario'] = unserialize($_SESSION['Usuario'])
if(isset($_SESSION['Usuario'])){
header('location:Pages/login.php');
}else{
switch($_SESSION['Tipo']){
case 'Administrativo':
if(count($_SESSION['Usuario']->getId_Colegio())>1){
header('location:preAdmin.php');
}else{
header('location:indexAdmin.php');
}
break;
case 'Docente':
if(count($_SESSION['Usuario']->getId_Colegio())>1){
header('location:preDocente.php');
}else{
header('location:indexDocente.php');
}
break;
case 'Estudiante':
header('location:indexEstudiante.php');
break;
case 'Acudiente':
header('location:indexAcudiante.php');
break;
default:
header('location:Controlador/logout.php');
break;
}
}
我究竟做错了什么?
执行完它 put 的那一行后,
$_SESSION['Usuario'] = unserialize($_SESSION['Usuario']);
作为会话变量内容的值将被保存,$_SESSION['Usuario']
覆盖原来的值,所以下次你通过同一行时它会unserialize
返回false
,因为它不能工作一秒钟已经处理了一些数据的时间,还会生成类型通知E_NOTICE
(您可能会根据您的 PHP 配置对其进行过滤)。您应该使用与会话不同的临时变量(以免修改和破坏其内容)来处理由返回的数据
unserialize
:此外,您并不总是使用
serialize
将数据保存在此类会话变量中,因此您应该在继续之前使您的代码同质化,或者使用始终包含相同内容类型的不同会话变量。最小功能示例:
$numero
如您所见,每次我们加载页面时,class属性都会增加 1Usuario
。那是因为类的状态保存在会话变量中。