Session 在CakePHP 2中,登录名被划掉了
我这里有一个大问题: 在一个CakePHP项目中,我有一个双步骤登录,用户登录公司的Active Directory,在成功检查凭据后,他们会在DB上再次检查,这样只有特定的人才能进入该站点。问题是,最近,用户可以看到另一个用户的信息,就好像他们是用另一个人的凭据输入的一样。最糟糕的是,并非所有部分都有相同的登录名。有时人A可以在第一页看到自己,但在第二页他可以看到自己是B,在第三页他看到自己是C 但最奇怪的是,这不是唯一发生的项目。它也出现在另一个共享相同规范的项目和自定义身份验证组件上(但它仅与自己项目的用户交叉) 我在这里有点不知所措,因为我检查了发送的cookies(只有蛋糕会话id),它们都正常并且与会话文件匹配 那么,有什么线索可以说明问题所在吗?我甚至不知道从哪里开始找。可能是在Auth上吗?还是会议?还是缓存 平台规格:Session 在CakePHP 2中,登录名被划掉了,session,php-5.3,cakephp-2.x,Session,Php 5.3,Cakephp 2.x,我这里有一个大问题: 在一个CakePHP项目中,我有一个双步骤登录,用户登录公司的Active Directory,在成功检查凭据后,他们会在DB上再次检查,这样只有特定的人才能进入该站点。问题是,最近,用户可以看到另一个用户的信息,就好像他们是用另一个人的凭据输入的一样。最糟糕的是,并非所有部分都有相同的登录名。有时人A可以在第一页看到自己,但在第二页他可以看到自己是B,在第三页他看到自己是C 但最奇怪的是,这不是唯一发生的项目。它也出现在另一个共享相同规范的项目和自定义身份验证组件上(但它
- PHP5.3
- CakePHP2.5(不是100%确定,但大约是2.4和2.6)
- IIS7
- SQL Server 2014数据库
请发一些代码。(例如,用于产生奇怪结果的操作的控制器方法、您的身份验证配置和登录方法等)您是否尝试过调试
$this->UsuarioModel->obtener_usuarios(数组('login'=>$request->data['Usuario']['login'])
,以确保它持有与Usuario.login
匹配的Usuario.id
,我已经尝试过了,但是当登录被交叉时,变量$usuario
保存了系统认为已登录的用户的信息,而不是实际的用户信息。我已经在Apache服务器上安装了该站点,目前运行良好。可能是关于IIS的,但我不是100%确定。这很奇怪。您是否在代码中的某个地方通过CakeSession::write()
,向Auth
或Auth.User
编写代码?不,只使用了一次,通过CakeSession::read('Auth.User.usuario')
从模型中读取用户,但这是我唯一一次这样使用它
public function authenticate(CakeRequest $request, CakeResponse $response)
{
CakeSession::delete('AuthError');
if($request->data['Usuario']['login'] == '' || $request->data['Usuario']['contraseña'] == '')
{
CakeSession::write('AuthError', __("Usuario o contraseña inválidos"));
return false;
}
$datasource = ConnectionManager::getDataSource('active_directory');
$dominio = isset($request->data['Usuario']['dominio']) ? strtoupper($request->data['Usuario']['dominio']) : 'INTERNAL';
$host = strtolower($request->data['Usuario']['dominio']).'.'.$datasource->config['host']; //imsglobal.com
$port = $datasource->config['port'];
$enlace = ldap_connect($host, $port);
$check = @ldap_bind($enlace,$dominio."\\".$request->data['Usuario']['login'],$request->data['Usuario']['contraseña']);
// debug($check);
ldap_close($enlace);
if($check)
{
$this->UsuarioModel = ClassRegistry::init('Usuario');
$usuario = $this->UsuarioModel->obtener_usuarios(array('LOGIN' => $request->data['Usuario']['login']));
if(!empty($usuario))
{
return array('id' => $usuario[0]['id'], 'usuario' => $usuario[0]['usuario']);
}
else
{
CakeSession::write('AuthError', __("El usuario ingresado no se encuentra registrado en el sistema. Por favor contacte a un administrador"));
}
}
else
{
CakeSession::write('AuthError', __("Usuario o contraseña inválidos"));
}
return false;
}