【问题标题】:Codeigniter $this->session->set_userdata() not working properlyCodeigniter $this->session->set_userdata() 无法正常工作
【发布时间】:2017-07-11 12:28:20
【问题描述】:

我正在生成一个会话,但是当我生成它时,在调用$this->session->set_userdata('sessionName',$sessionArray) 函数后我没有得到__ci_last_regenerate。当我在没有 __ci_last_regenerate 的情况下生成会话后重定向时,会话数据不会出现在下一页上。我使用的是 CI 3.1.4

$user_basic = array( 
    'user_id' => $user_id, 
    'email' => $this->input->post('email'), 
    'is_user_login' => 'true', 
    'language' => 'eng' 
); 
$this->session->set_userdata('user_basic',$user_basic); 

echo'<pre>';print_r($this->session->userdata());

谢谢

【问题讨论】:

  • 请在此处添加您的代码或您目前尝试过的代码。
  • 看到这个 SO 问题可能会有所帮助question-link

标签: php codeigniter session


【解决方案1】:

如果您使用的是 PHP >=7.0,请检查您的 codeignator 版本

如果 codeignator 版本是 3.0 或低于 3.0,那么您需要更新 codeignator 到当前版本(例如 codeignator 当前版本 3.1.7)

【讨论】:

  • 谢谢你救了我!
【解决方案2】:

在 config/autoload.php $autoload['libraries'] = array('session'); 中自动加载您的会话

首先确保您已设置会话保存路径。有人认为像这个例子

$config['sess_save_path'] = APPPATH . 'cache/sessions/'; 
$config['sess_regenerate_destroy'] = TRUE;

文件夹权限 0700

然后尝试在控制器上设置会话,例如示例

$sessionArray = array(
   'is_logged' => TRUE
);

$this->session->set_userdata($sessionArray);

// Remove the sessionName $this->session->set_userdata('sessionName',$sessionArray)

那么你应该可以像这样访问会话

<?php echo $this->session->userdata('is_logged');?>

【讨论】:

  • 你的解决方案能得到__ci_last_regenerate吗?
  • 在 config/autoload.php $autoload['libraries'] = array('session'); 中自动加载会话并尝试将其更改为 true $config['sess_regenerate_destroy'] = TRUE;
  • 我需要了解更多。我会谷歌它。谢谢先生。
【解决方案3】:

首先加载会话库:

$this->load->library('session')

像这样使用它:

$this->session->set_userdata($sessionArray)

但这完全取决于您的其余代码。上传其余代码以获得更好的解决方案

【讨论】:

  • $user_basic = array( 'user_id' =&gt; $user_id, 'email' =&gt; $this-&gt;input-&gt;post('email'), 'is_user_login' =&gt; 'true', 'language' =&gt; 'eng' ); $this-&gt;session-&gt;set_userdata('user_basic',$user_basic); echo'&lt;pre&gt;';print_r($this-&gt;session-&gt;userdata()); 所以当我打印用户数据时我应该有一个 __ci_last_regenerate 以便在下一页我将继续这个会话
  • 好的。那么你的初始化应该是$this-&gt;session-&gt;set_userdata($user_basic)。如果函数set_userdata() 是一个会话数据数组,则只使用一个参数
  • 不,问题不在于你只需要认为我没有得到 __ci_last_regenerate 这对于访问其他页面上的会话非常重要。并且一般 __ci_last_regenerate 在会话创建时生成。
  • 那你试过$this-&gt;session-&gt;__ci_last_regenerate 吗?或者您可以将 config/config.php 中的 $config['sess_driver'] 更改为 'database'。然后从数据库中获取时间戳
猜你喜欢
  • 2015-02-28
  • 2018-03-11
  • 2020-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
相关资源
最近更新 更多