CodeIgniter 3 会话在页面刷新后销毁

Posted

技术标签:

【中文标题】CodeIgniter 3 会话在页面刷新后销毁【英文标题】:CodeIgniter 3 sessions destroy after page refresh 【发布时间】:2017-11-19 23:35:57 【问题描述】:

尽管这里有无数类似的问题,但没有一个对我有用。所以,我决定在这里发布。

问题是页面刷新/重定向后会话被破坏。

我在 Windows 10 上使用 XAMPP 服务器(带有 php 7.x 的最新版本),我认为这是 codeigniter 设置的问题,但是我只是测试了传统的会话代码(没有 Codeigniter)并且工作正常。

传统 PHP 代码(工作正常)

session_start();
if(!isset($_SESSION['admin'])) 
    $_SESSION['admin']='test';
    die('session not set, set it now');

else 
    echo $_SESSION['admin'];

Codeigniter 代码(这就是问题所在)

if($this->session->userdata('admin')) 
    echo $this->session->userdata('admin');

else 
    $this->session->set_userdata('admin', 'test');
    echo 'session not set, set it now';

Codeigniter 会话配置

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = 'C:\\xampp\\htdocs\\application\\cache\\session\\';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

注意相同的 Codeigniter 代码在 WAMP 服务器 - Windows 10 上运行良好

【问题讨论】:

只是一个提示,而不是像$config['sess_save_path'] = 'C:\\xampp\\htdocs\\application\\cache\\session\\';那样写APPPATH$config['sess_save_path'] = APPPATH . 'cache/session/';一样使用$config['sess_save_path'] = APPPATH . 'cache/session/'; 我尊重你的建议,虽然,我已经手动检查了目录 `C:\\xampp\\htdocs\\application\\cache\\session\\` 并在那里找到了会话文件,这意味着,它工作正常。 那么print_r($this->session->userdata); 你什么时候得到什么? 仅限Array ( [__ci_last_regenerate] => 1497678913 ) $_SESSION 这也返回相同? 【参考方案1】:

您的代码看起来正确。我想您可以看看Native-session。这可能会解决您的问题。

还要检查config.php 是否有cookie_domain。这不应为空。

【讨论】:

【参考方案2】:

会话设置似乎正确,我想建议你,请检查 Application/Config/autoload.php 中的会话库

$autoload['libraries'] = array('session');

希望对你有帮助

【讨论】:

我不明白,为什么你会得到一个错误,如果你会加载会话库,我认为这是正确的方法

以上是关于CodeIgniter 3 会话在页面刷新后销毁的主要内容,如果未能解决你的问题,请参考以下文章

如何在codeigniter中关闭浏览器来销毁会话

Chrome 和 Internet Explorer 中的 Codeigniter 销毁会话

销毁会话,但保留一个变量集

在JSP中销毁会话[关闭]

在 JSP 中销毁会话 [关闭]

Codeigniter v3.0 Flashdata 会话在 PHP 7.4 和 XAMPP 8.0 中未过期