会话ID在CodeIgniter中正在发生变化

时间:2011-08-08 02:32:19

标签: php session codeigniter sessionid

我正在使用CodeIgniter的会话功能,我正在运行此代码:

$session_id = $this->session->userdata('session_id');
echo "My Session ID is $session_id"; 

每次加载页面时它都会不断变化。这是否意味着会话未正确保存?有没有办法调试这个并找出原因?或者我没有正确使用这个库?

启用错误报告时,我没有收到任何错误,我正在使用CI的自动加载功能来加载会话库:

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

任何建议都会有所帮助!

以上代码的输出示例:

我的会话ID是7c92bac53d2654df6e87eb4e4cb25467

..重装..

我的会话ID是c6dd14aed2499760f788a1364dcab030

更新:我在config.php中的会话配置如下所示:

$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;

所以我找到了

session_start();
$_SESSION['myvar']='var'; 

也没有存储任何东西,我的linux服务器上的会话存储似乎有问题。

我的会话保存路径有apache:apache 775权限。也许这应该转移到serverfault?

6 个答案:

答案 0 :(得分:14)

根据CI的Session.php,每次更新时ID都会更改,但它们会保留对旧ID的引用,以便他们可以在右侧更新。

另外,根据文档:“session_id”每五分钟重新生成一次(默认情况下)“。

你有什么理由需要访问“session_id”吗?如果你需要某种固定ID,你应该创建自己的“my_session_id”,这样就不会在请求之间改变。

$uniqueId = uniqid($this->CI->input->ip_address(), TRUE);
$this->session->set_userdata("my_session_id", md5($uniqueId));

答案 1 :(得分:2)

通过替换最新版本(来自CI网站)的目录系统/库/会话,问题将得到解决。 CI的会话库中有几个错误,它们已经解决了。

答案 2 :(得分:1)

@ this.lau

您可以提及该文件的链接对初学者有用。

即。 CodeIgniter/system/libraries/Session.php

答案 3 :(得分:1)

在CI中更改session_id是正常的。 但我有一个问题。会话值未保存,仅在CI中不持久。

我通过将Codeigniter更新为当前的最新版本来修复它 3.1.6。

答案 4 :(得分:0)

您可以在此处描述一个可能的问题:https://github.com/EllisLab/CodeIgniter/issues/3108

事情是愚蠢的。如果您使用点设置cookie名称,则每次重新加载页面时都会重新生成会话ID。当然,您将无法保留任何用户特定数据!

答案 5 :(得分:0)

如果您不想每五分钟更新一次会话,请执行以下更改。

转到System / libraries / Session.php中的session.php文件 并设置所有参数 public $ sess_encrypt_cookie; public $ sess_use_database; ... to blanks  这对我有用