gpt4 book ai didi

session - cakephp 重定向时丢失 session 变量

转载 作者:行者123 更新时间:2023-12-02 18:06:57 25 4
gpt4 key购买 nike

我的 session 变量有问题,用户登录到应用程序,然后它设置了一个 session 变量,但当它重定向到下一个 Controller 时,它不在那里。

目前我没有使用 auth 组件,我认为这是不正确的,但我不知道如何将它应用到我的逻辑中。这是因为我不使用用户名和密码登录用户,他们是从其他网站进行身份验证的,该网站为我提供了一张票证和一个 key 来了解他们是谁。

这是我的应用程序启动的 UsersController 代码:

class UsuariosController extends AppController {
public $components = array('Session');

function beforeFilter() {

}

function login() {
$isLogged = false;
if(!empty($_POST['Ffirma']) ) {
$this->loginByTicket();
}
else if(!empty($this->data)) { //When users log by email it works perfectly
$this->loginByEmail();
}
}

private function loginByEmail() {
//Se busca el usuario en la base de datos
$u = new Usuario();
$dbuser = $u->findByEmail($this->data['Usuario']['email']);

//if doesn't exist user in db
if(empty($dbuser) ) {
$this->Session->setFlash('El usuario no existe en el sistema, consulte con el administrador.');
$this->redirect(array('controller' => 'usuarios', 'action' => 'login'));
exit();
}
$this->userIsCorrectlyLogged($dbuser);
}

function loginByTicket() {
$Fip = $_POST['Fip'];
$Frol = $_POST['Frol'];
$FidPersona = $_POST['Fidpersona'];
$Fticket = $_POST['Fticket'];
$Ffirma = $_POST['Ffirma'];
//Check sing
$f = $this->gen_firma($Frol, $FidPersona, $Fticket);
if( strcmp($f, $Ffirma) != 0 ) {
$this->Session->setFlash('Firma no válida.');
return;
}
//Check if ticket is valid
//1º Check if it exists on the db
$t = split('-',$Fticket);
$ticket = new Ticket();
$dbticket = $ticket->findById($t[0]);
if( strcmp($dbticket['Ticket']['valor'], $t[1]) != 0) {
$this->Session->setFlash('Ticket no válido.');
return;
}

//2º if Ip ok
if($Fip != $dbticket['Ticket']['ip']) {
$this->Session->setFlash('IP no válida.'.' '.$dbticket['Ticket']['ip'].' '.$Fip);
return;
}

$u = new Usuario();
$dbuser = $u->findById($dbticket['Ticket']['idPersona']);
$this->userIsCorrectlyLogged($dbuser);
}

private function userIsCorrectlyLogged($dbuser) {
$user = array('Usuario' => array(
'last_login' => date("Y-m-d H:i:s"),
'rol_app' => 1,
'nombre' => $dbuser['Usuario']['nombre'],
'email' => $dbuser['Usuario']['email'],
'apellidos' => $dbuser['Usuario']['apellidos'],
'id' => $dbuser['Usuario']['id']
) );
//Some stuff to determine rol privileges
$this->Session->destroy();
$this->Session->write('Usuario', $user);
$this->redirect(array('controller' => 'mains', 'action' => 'index'),null, true);
exit();
}

如您所见,我在知道用户已正确登录之前进行了一些控制,并且在用户正确登录后我只保存 session 。

在我的 AppController 中,我检查用户是否已登录,但 session 变量已经消失:

class AppController extends Controller {
public $components = array('Session');
function beforeFilter() {
//Configure::write('Security.level', 'medium'); //I've tried this that i saw somewhere
pr($this->Session->read()) // Session is empty
if($this->checkAdminSession()) {
$user = $this->Session->read('Usuario');
$email = $user['Usuario']['email'];
$usuario = new Usuario();
$dbuser = $usuario->findByEmail($email);
$respons = $usuario->getAccionesResponsable($dbuser['Usuario']['id']);
$this->set("hayacciones", true);
if( empty($respons) ) $this->set("hayacciones", false);
}
else {
$this->Session->setFlash('Necesitas identificarte para acceder al sistema.');

$this->redirect('/usuarios/login/');
exit();
}
}
function checkAdminSession() {
return $this->Session->check('Usuario');
}
}

我很绝望,我读了很多文档,但我不知道如何解决这个问题,你能给我任何线索吗?

非常感谢您,抱歉我的英语不好!

注意:我发现,如果安全级别较低,它会起作用:

Configure::write('Security.level', 'low');

但我不喜欢这个解决方案...

最佳答案

您正在重写 beforeFilter() 方法。因此,不要使用这个:

<?php
class UsuariosController extends AppController {

function beforeFilter() {

}

你应该这样做:

<?php
class UsuariosController extends AppController {

function beforeFilter() {
parent::beforeFilter();
}

关于session - cakephp 重定向时丢失 session 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9127195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com