【问题标题】:CodeIgniter ip_address() always returns 0.0.0.0CodeIgniter ip_address() 总是返回 0.0.0.0
【发布时间】:2013-11-26 14:57:27
【问题描述】:

我的Codeigniter sessions 最近死了很多。所以我去查看了我的数据库,发现所有会话都有ip_address 0.0.0.0,有些会话有useragent 0

所以我检查了我的 $CI->input->ip_address() 函数,发现它总是返回 0.0.0.0 事件,认为 $_SERVER['REMOTE_ADDR'] 返回一个在 $CI->input->valid_ip($ip) 中有效的 IP 地址。

这与我的会话死亡有关吗?

我还了解到,当user-data 达到 4K 时,会话往往会终止。它可能是其中的一部分,因为我在会话中为每个页面提供了一个永远不会被删除的 ID。我认为这不是问题,因为 90% 的活动是通过 1 页和AJAXs(我已经添加了 AJAX 会话修复)。

编辑:我使用的是 CI 版本 2.1.4。

【问题讨论】:

  • 你的 CI 版本是多少?您的 CI 系统文件夹文件是否已自定义?如果您要进行故障排除,您必须转到 /system/core/input.php 并找到 public function ip_address()
  • 另外,您提到数据库中的 IP 分配为 0.0.0.0,因此有人会认为您没有使用仅 cookie 路由,因此 4k 限制不适用于数据库会话。
  • 我使用的是 CI 版本 2.1.4 并且尚未自定义。我对核心所做的唯一补充是创建一个“MY_Session.php”以应用 AJAX 会话修复。
  • 出于好奇,我对您的 AJAX 会话修复感兴趣,因为我无法 100% 解决 RACE 条件问题,所以我恢复使用 $_SESSION。不过,我一次进行了大约 6 个异步调用。

标签: php ajax codeigniter session ip


【解决方案1】:

input->ip_address() 在 system/core/input.php 中定义不正确。
在第 351 行将其更改为 $this->ip_address = $this->server('REMOTE_ADDR');

【讨论】:

    【解决方案2】:

    所以,我不确定它是怎么发生的,但显然 var "REMOTE_ADDR" 是小写的,应该是大写的。所以将strtoupper() 添加到input->server() 在 var $index 上暂时解决了我的问题....

    很奇怪的问题...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      • 2019-04-20
      • 2018-09-18
      相关资源
      最近更新 更多