用户
 找回密码
 入住 CI 中国社区
搜索
查看: 5174|回复: 7
收起左侧

[已解决] 新手对CI多控制器无法传递session的困惑

[复制链接]
发表于 2011-2-5 20:41:22 | 显示全部楼层 |阅读模式
ci确实很强大。

但这两天一直一个问题困扰着我,让我睡不着觉,查了论坛,发现有很多人面临着跟我一样的困惑:

使用CI自带的session类

本地开发,环境是WAMP

根据以前的习惯,做了多个控制器(类),默认的当然是Index,又根据功能,写其他的一些类,比如用户登入登出的类login

在控制器login里面使用$this->session->set_userdata('admin_id','admin');后,跳转的Index控制器,INDEX控制器判断登录状态,当然就要读取session了,所有$this->session->userdata('admin_id');结果发现这个值是空的!!!!

于是开始查找原因:
1.是不是设置的问题? /application/config/config.php
PHP复制代码
 
$config['encryption_key'] = '2cb3acfa20c6173b98028a9e6610bd98';
$config['sess_cookie_name']  = 'ci_session';
$config['sess_expiration']  = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = FALSE;
$config['sess_use_database'] = FALSE;
$config['sess_table_name']  = 'ci_sessions';
$config['sess_match_ip']  = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;
 
复制代码

全部改成默认的设置,再测试,还是不对!

2.网上搜搜,说CI的session是用cookies的,检查cookies_domain选项,设置为空,测试,session还是空!

3.autoload.php设置里面,$autoload['libraries'] = array('session');还是不行!!!!

无奈,开始打开session.php一行一行输出……

忽然,发现了问题,原来每打开一个controller,就自动夹在一次session,难怪每次取session都是空!codeigniter的session类是不支持多控制器共用session的!!!!

找到了问题,可要怎么解决?请各位大侠帮忙……

作为一个phper新手,我也会不断研究的,有新的进展,我都会回复原帖http://www.kxss.net/bbs/viewthread.php?tid=1318后面。
发表于 2011-2-5 22:59:54 | 显示全部楼层
这个和每个控制器都加载一次 SESSION 类库无关,PHP 必须每次请求都加载,这是 PHP 的限制。
你这个问题是 COOKIE 的问题,看下 PATH 是不是设置有问题。
我个人特别不建议用 COOKIE,因为这个牵扯的问题很多,所以问题就多。
CI 并不是什么都好,要取其精华去其糟粕。
发表于 2011-2-6 02:02:30 | 显示全部楼层
建议用Hex的那个session噢~

曾住上社的路过~
 楼主| 发表于 2011-2-6 14:10:38 | 显示全部楼层
CODEIGNITER支持多个控制器传递的session类写好了,跟ci的session类一样,可以直接用ci的session类的一些方法,比如,session->userdata,session->set_userdata,session->all_userdata,session->unset_userdata(),session->sess_destroy()

源代码已经贴到我的网站了,大家可以去拿。

谢谢HEX大侠
发表于 2011-2-6 16:41:20 | 显示全部楼层
我看了一下, 楼上的 session 类也是用 PHP Session 实现的,应该和我发布的 Session 类差不多,呵呵
 楼主| 发表于 2011-2-6 17:05:45 | 显示全部楼层
不是吧,大侠,我刚刚开始捣鼓php,我以前是学桌面程序的,根本不懂php这些B/S架构的程序的,HEX大侠肯定是谦虚了。。。

以后我会经常来问问题的,呵呵,如果问得问题白痴了,不要笑我~~~
发表于 2011-2-7 01:32:25 | 显示全部楼层
回复 6# zuimengt


    建议多看看相关的书籍和资料,WEB应用和桌面应用差别还是挺大的,不能一味的照搬桌面开发的经验,我以前也是做桌面开发的。
发表于 2011-2-9 10:03:29 | 显示全部楼层
ci 的session能从A控制器传到B控制器。。

本版积分规则