移动网络上的Cookie损坏

时间:2012-04-26 14:05:07

标签: php codeigniter networking mobile cookies

我在我最近的一个网站上使用Codeigniter 2.1,当访问量超过3g时,cookie就会变得腐败......

当做一些调试到最初读取cookie的时候,我可以看到它显然被截断了,这是一个例子:

a:14:{ 

应该是

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

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

  • 华硕笔记本电脑配沃达丰Dongle(x)
  • Macbook Air w / Vodafone Dongle(x)
  • Orange UK网络上的iPhone 3(x)
  • Samsung Galaxy SII on Three(Worked)

我猜测它的网络基础,并且标题在整个过程中的某个地方被破坏了。 (可能是代理?)

这整周都在找我,所以任何信息都会很棒。

编辑:要注意,该网站有相当多的cookie,但规模不大。我们有Google Analytics,Sharethis,Uservoice和Facebook。

3 个答案:

答案 0 :(得分:4)

虽然我不知道是什么原因造成这种情况,但我有一些想法可以帮助您找到可以帮助您解决问题的问题。 我首先要做的是尝试使错误保持一致,尝试使用上面的例子中的一个提供者。

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

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

答案 1 :(得分:0)

你有吗

$config['sess_match_ip']        = TRUE;

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

或者 - 您是否尝试过切换

$config['sess_encrypt_cookie'] = true;

更改此功能也可以解决您的问题

答案 2 :(得分:0)

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