PHP 会话在 Codeigniter 4 中无法正常工作

问题描述 投票:0回答:1

PHP 会话无法正常工作。会话中的值首先存储在

get_values_from_email()
中。但我看不到屏幕上打印的函数
var_dump($this->session->get())
内的
change_password()
的值。如果我在脚本开头执行
var_dump($this->session->get())
,那么我就可以检索会话值。

在函数结束时

change_password()
,会话
$this->session->get('email')
在函数结束时始终为空,但如果我在函数开头回显会话,则输出 a 值。我是这里的新手,我想知道我在会话中做错了什么。谢谢!

<?php
namespace App\Controllers;
use App\Models\Password_recovery_model;
use App\Validation;

class Password_recovery extends BaseController
{
    public function __construct()
    {  
       $this->session    = \Config\Services::session(); 
    
    
    }

public function index(){ 
                        return view('password_recovery');
                       }

public function get_values_from_email(){ 
                                        
// var_dump($this->session->get());
$uri             = new \CodeIgniter\HTTP\URI(current_url());
if(!empty($uri->getSegment(4)) && !empty($uri->getSegment(5))){ 

$email_code = $uri->getSegment(4);
$email      = $uri->getSegment(5);

//stored session values            
$this->session->set('email_code', $email_code); 
$this->session->set('email',$email);   
return view('change_password');                                                                                                                        
}   
}

public function change_password(){
                               
$request          = \Config\Services::request();
$userModel        = new Password_recovery_model();
$password_changed = false;

$password        =$request->getJsonVar('password');
$validation_code =$request->getJsonVar('validation_code');

$validation = \Config\Services::validation();

           
if(!$validation->withRequest($this->request)->run()){  
                                                
$val_arr_p=$validation->getErrors();


if(isset($val_arr_p['password'])&& !empty($val_arr_p['password'])){ 
                                                $data = array("error"=> $val_arr_p['password']);

                                                return  $this->response->setJSON($data);
                                                } 
// var_dump($this->session->get());

}else{ 
if(!empty($this->session->get('email'))){

 $email = $this->session->get('email');

 }


if(!empty($email)){                 
    //  $password_changed = $userModel->change_password($validation_code,$email,$password);

    $data             = array("message"=> "Su contraseña ha sido cambiada exitosamente");
    return  $this->response->setJSON($data); 

    }else{
        // $email =  $session->get('email');
        if(isset($_SESSION['email'])){
                                        $email = $_SESSION['email'];
                                            echo  $_SESSION['email_code'].$_SESSION['email'] ;


                                        }

            $data             = array("message"=> "No email variable222");

            return  $this->response->setJSON($data); 
            }

                            }


//confirmed email
if($password_changed){
$data   = array("message"=> "Su correo electrónico ha sido enviado exitosamente. Puede demorar hasta 5 minuton en llegar.");
}else{
$data = array("message"=> "Hubo un error porfavor trate de nuevo.");
}        

}

public function send_email_to_user_to_change_password(){
$request   = \Config\Services::request();
$email     =$request->getJsonVar('email');
$userModel = new Password_recovery_model();

if(!empty($email)){

                
//generates validation code  
$email_validation_code = $userModel->email_validation_code();

//sends code to email
$send_e = $userModel->send_email_to_change_password($email);
if($send_e){
        $data   = array("message"=> "Su correo electrónico ha sido enviado exitosamente para recuperar su contraseña. El mismo puede tardar hasta 5 minutos en llegar. ");
        return $this->response->setJSON($data);

        }
    else{ 
                $data   = array("message"=> "Hubo un problema. Trate nuevamente");
                return $this->response->setJSON($data);
            }
        }


}
public function pass_generator(){

$userModel = new Password_recovery_model();
$pgen      = $userModel->random_str();
$data      = array("gen_p"=> $pgen);

header('Content-Type: application/json');
$this->response->setHeader('Cache-Control', 'no-cache')->appendHeader('Cache-Control', 'must-revalidate');

return $this->response->setJSON($data);

                                }
}
?>

我期待

$this->session->get('email')
会话变量有一个值。

php session-variables codeigniter-4
1个回答
0
投票

在构造函数上面声明一个变量来使用服务,但是这个服务默认已经存在于BaseController

class Password_recovery extends BaseController
{

public $session;

    public function __construct()
    {  
       $this->session    = \Config\Services::session();    
    
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.