【问题标题】:Cookie Corruption on Mobile Network移动网络上的 Cookie 损坏
【发布时间】:2012-05-07 06:52:41
【问题描述】:

我在我的一个最新网站上使用 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 网络 (x) 上的 iPhone 3
  • 三星 Galaxy SII on 三(已工作)

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

这已经让我整整一个星期了,所以任何信息都会很棒。

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

【问题讨论】:

  • 您知道请求已被完全处理吗?该网站将被加载还是只是被取消?这些系统上使用了什么浏览器?
  • 很难说,它会随着不同的设备/网络而变化。在带有沃达丰加密狗的华硕笔记本电脑上,该页面未提供,但无法告诉您标题状态代码,因为我没有可以访问它 atm,将用更多信息更新我的问题.. 谢谢!
  • 您是否尝试联系移动运营商以听取他们对此的看法?
  • 能否请您发布您的会话 + cookie 数据配置
  • 您能否也测试一下其他手机是否可以在“三”网络上运行?即确认它是基于网络还是基于电话?

标签: php codeigniter networking mobile cookies


【解决方案1】:

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

  • 是 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 之类的程序,该程序可让您在非常低的级别上分析来回发送的标头。

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

【讨论】:

  • 我目前没有时间进行这些测试,但它们看起来都很合乎逻辑,我相信我会在途中找到问题,谢谢 Michael。
【解决方案2】:

你有吗

$config['sess_match_ip']        = TRUE;

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

或者 - 您是否尝试过切换

$config['sess_encrypt_cookie'] = true;

更改此设置也可能解决您的问题

【讨论】:

  • 是的 - 如果用户使用 cookie 访问他的网站,而他的网站认为这是不好的(因为 IP 已更改) - 那么结果可能是删除 cookie - 留下 a:14标识符。就像我说的那样 - 因为它似乎只发生在手机上,并且手机循环 IP 地址,这是需要明确检查的事情
  • 不,a:14:{ 不是有效的序列化数据(尝试调用unserialize())。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 2012-04-11
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多