5

我在我的一个最新网站上使用 Codeigniter 2.1,当通过 3g 访问时,cookie 正在损坏......

在对最初读取 cookie 进行一些调试时,我可以看到它显然被截断了,下面是一个示例:

a:14:{ 

应该

a:14:{s:10:"session_id";s:32:"ef171f95db26ad51986.......

这只发生在连接到移动网络的设备上读取 cookie 时,到目前为止我只能测试三个,令我惊讶的是,一个有效:

  • 华硕笔记本电脑带沃达丰加密狗 (x)
  • Macbook Air 带 Vodafone 加密狗 (x)
  • Orange UK 网络上的 iPhone 3 (x)
  • 三星 Galaxy SII on 三(已工作)

我猜它是基于网络的,并且标头在途中的某个地方被损坏了。(可能是代理?)

这已经让我整周都知道了,所以任何信息都会很棒。

编辑:要注意,该站点有很多 cookie,但大小并不大。我们有 Google Analytics、Sharethis、Uservoice 和 Facebook。

4

3 回答 3

4

虽然我不知道可能是什么原因造成的,但我有一些想法可以帮助您找到应该帮助您解决它的问题。我首先要做的是尝试使错误一致,尝试仅使用上面示例的一个提供者。

  • cookie 总是等于a:14:{
  • 你能创建一个 2 行的 PHP 页面,其中只有一个与该 cookie 命名相同的 cookie,在第 1 行打印 cookie 并在第 2 行设置 cookie。然后更改 cookie 的值,看看你可以做出什么样的改变当页面上没有其他变量时。(您可以将 cookie 设置为a:14:{}? a:1? a:14:xxx:{xxxx}? 我们正在寻找一种可能始终如一地切割字符串的模式。
  • 如果 2 行页面没有代码切割问题,则复制您遇到实际问题的页面,然后开始删除页面上的所有内容,直到您只有两行(设置 cookie 的行以及打印它的行)问题出在您的代码中。
  • 如果 2 行页面确实有问题,那么可能真的是移动网络(根据我的经验,我没有看到这一点,但是他们可能有某种正在清理 cookie 的代理)。我会开始尝试通过 cookie 发送不同的代码,直到您发现提供商网络上没有问题的内容。(如 uuencode 或 base64_encode cookie 中的数据)。
  • 如果事实证明提供程序阻止了所有内容,则可以考虑下载诸如 fiddler 之类的程序,该程序允许您在非常低的级别上分析来回发送的标头。

希望这些故障排除步骤有所帮助。

于 2012-05-11T03:06:00.803 回答
0

尝试在没有 ci 会话类的情况下设置一些测试 cookie,看看它是否也损坏了。如果不是,那么它是一个 ci 错误。我有一个类似的问题,Codeigniter 无法序列化用“\”转义的数据。还要确保在保存 cookie 后记录其大小。也许它超过了 4096。

于 2012-05-14T18:44:36.223 回答
0

你有

$config['sess_match_ip']        = TRUE;

如果是这样 - 这在手机设备上不起作用,因为许多电信公司在手机上每秒循环 IP 地址(不 - 我不知道为什么) - 所以它会杀死你的会话

或者 - 您是否尝试过切换

$config['sess_encrypt_cookie'] = true;

改变这个也可以解决你的问题

于 2012-05-11T04:05:54.330 回答