You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter 2.2.3 Session取值为空:跨方法无法获取已设置Session值

解决CodeIgniter 2.2.3中Session数据跨方法获取为空的问题

看起来你遇到了CodeIgniter 2里Session设置后跨方法拿不到数据的典型问题,我来帮你一步步排查和解决:

核心排查方向与解决方案

1. Session存储路径权限或配置问题

CodeIgniter 2默认会把Session文件存在系统临时目录,但如果这个目录没有读写权限,Session数据根本没法持久化,导致下一个请求拿不到之前的数据。

解决步骤:

  • 在application/config/config.php里手动指定Session存储路径:
$config['sess_save_path'] = APPPATH . 'cache/sessions/';
  • 在application/cache下创建sessions目录,给它设置合适的权限(比如chmod 700,确保服务器进程能读写)。

2. Cookie配置导致Session无法跨请求传递

CodeIgniter 2的Session默认依赖Cookie传递Session ID,如果Cookie参数设置不对,新请求就带不上Session ID,自然拿不到之前的数据。

检查这些配置项(同样在config.php里):

// 确保Cookie的路径是网站根目录,避免子目录无法访问
$config['cookie_path'] = '/';
// 域名设置要和你的网站一致,本地测试可以留空或设为localhost
$config['cookie_domain'] = '';
// 如果不是HTTPS环境,设为FALSE
$config['cookie_secure'] = FALSE;

3. Session ID不一致问题

两个方法的请求如果用了不同的Session ID,肯定拿不到同一份数据。你可以在两个方法里分别打印Session ID验证:

// 在Contact_View_Get里
echo "Session ID in Get: " . session_id();
// 在Contact_View里
echo "Session ID in View: " . session_id();

如果ID不同,说明Cookie没传递过来,回到上面的Cookie配置排查。

4. 超大Session数据导致Cookie溢出

你把$data['list']整个数组存在Session里,如果这个数组太大,超过了Cookie的4KB大小限制,数据就会丢失。

解决办法:改用数据库存储Session

  1. 在config.php里开启数据库存储:
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'ci_sessions';
  1. 在你的数据库里创建对应表:
CREATE TABLE IF NOT EXISTS `ci_sessions` (
        `session_id` varchar(40) DEFAULT '0' NOT NULL,
        `ip_address` varchar(45) DEFAULT '0' NOT NULL,
        `user_agent` varchar(120) NOT NULL,
        `last_activity` int(10) unsigned DEFAULT 0 NOT NULL,
        `user_data` text NOT NULL,
        PRIMARY KEY (session_id),
        KEY `last_activity_idx` (`last_activity`)
);

5. 请求跨域或Session匹配设置过严

  • 如果Contact_View_Get是AJAX请求、Contact_View是页面跳转,要确保两者域名完全一致(包括HTTP/HTTPS、端口),否则Cookie不会跨域传递。
  • 检查config.php里的sess_match_ip和sess_match_useragent:如果sess_match_ip设为TRUE,而你的请求IP有变化(比如用了代理),会导致Session失效,建议先暂时设为FALSE测试。

代码小优化

你的代码里有个细节可以调整:在Contact_View里用了$_SESSION['deliverdata'],但CodeIgniter 2里更推荐用框架自带的$this->session->userdata('deliverdata')来获取,避免兼容问题。

另外,确保你已经加载了Session库,最好在application/config/autoload.php里全局加载:

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

内容的提问来源于stack exchange,提问作者sam christy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:10:56