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')
会话变量有一个值。
在构造函数上面声明一个变量来使用服务,但是这个服务默认已经存在于BaseController
中class Password_recovery extends BaseController
{
public $session;
public function __construct()
{
$this->session = \Config\Services::session();
}
}