【问题标题】:Session ID is changing in CodeIgniterCodeIgniter 中的会话 ID 正在更改
【发布时间】:2011-10-22 01:53:49
【问题描述】:

我正在使用 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 权限。也许这应该转移到服务器故障?

【问题讨论】:

  • 可能是一种内置的会话固定预防机制,尽管在每次请求时更改它听起来有点极端
  • 您是否将会话保存到数据库?
  • @AlienWebguy 感谢您的回复,我用会话配置更新了我的问题,我没有使用数据库
  • @Phil,抱歉,我不熟悉内置的会话固定预防机制
  • @Pete 您使用的是Native Session 还是其他替代会话库?有关会话固定的更多信息,请参阅en.wikipedia.org/wiki/Session_fixation

标签: php session codeigniter sessionid


【解决方案1】:

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

我通过将 Codeigniter 更新到当前最新版本来修复它 3.1.6.

【讨论】:

    【解决方案2】:

    通过根据最新版本(来自 CI 网站)替换目录 system/libraries/ session,问题将得到解决。 CI的会话库中存在几个错误,并且已经解决。

    【讨论】:

      【解决方案3】:

      根据 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));
      

      【讨论】:

      • 感谢Laurent的回答,我发现即使是正常的会话数组在服务器上也无法正常工作,我只是认为会话ID会指示当前用户所在的会话。但是显然我的问题远不止于此
      【解决方案4】:

      @this.lau

      你可以提一下文件的链接对初学者很有用。

      即CodeIgniter/system/libraries/Session.php

      【讨论】:

        【解决方案5】:

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

        转到 System/libraries/Session.php 中的 session.php 文件 并设置所有参数,如 public $sess_encrypt_cookie;public $sess_use_database;... 到空白 它对我有用

        【讨论】:

        • 我认为通过将 config.php 值更改为 300(60 秒 x 5 分钟)以外的值更容易将会话更新从默认的 5 分钟更改为:$config['sess_time_to_update']
        【解决方案6】:

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

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

        【讨论】:

          猜你喜欢
          • 2013-11-08
          • 1970-01-01
          • 1970-01-01
          • 2023-03-03
          • 2012-08-03
          • 1970-01-01
          • 1970-01-01
          • 2015-09-06
          • 2011-07-08
          相关资源
          最近更新 更多