【问题标题】:Passing secure cookies to PHP via AJAX通过 AJAX 将安全 cookie 传递给 PHP
【发布时间】:2011-11-20 17:34:42
【问题描述】:

根据文档,我正在实施 LinkedIn JavaScript to REST token exchange,并且有一个启用 SSL 的页面供会员登录,该页面将他们的 oauth 令牌存储在安全的“凭据”cookie 中。然后我尝试通过 jQuery $.post() 将这些 cookie 传递给 PHP 页面:

$.post('https://' + document.domain + '/exchange.php', function(data) {
  alert(data);
});

当我检查通过 Firebug 发送的数据时,我可以在 jQuery POST 的标题中看到以下内容:

Cookie: __utma=xxxx; __utmc=xxxx; __utmz=xxxx; linkedin_oauth_YYYY=yyyy; PHPSESSID=xxxx; __utmb=xxxx

然而,在 exchange.php 页面上,通过 print_r($_COOKIE); 只暴露了非安全 cookie(接收页面只能看到 Google Analytics 和 PHP 会话 cookie):

Array
(
  [__utma] => xxxx
  [__utmc] => xxxx
  [__utmz] => xxxx
  [PHPSESSID] => xxxx
  [__utmb] => xxxx
)

任何想法我做错了什么?我正在使用 SSL 发布到同一个域,但 exchange.php 脚​​本无法使用安全 cookie。

更新:

我现在也在 exchange.php 页面上回显 $_SERVER 值,有趣的是我得到以下信息:

Array
(
  [HTTPS] => on
  [HTTP_COOKIE] => __utma=xxxx; __utmc=xxxx; __utmz=xxxx; linkedin_oauth_YYYY=yyyy; PHPSESSID=xxxx; __utmb=xxxx
)

所以 cookie 被传递了,但没有在 $_COOKIE 变量中设置?仅供参考,运行 PHP 5.3.3。

【问题讨论】:

    标签: php cookies oauth-2.0


    【解决方案1】:

    想通了——在我运行上述代码的服务器上,我安装了Suhosin,它限制了请求和 cookie 索引的最大长度为 64 个字符——完整的未混淆的linkedin_oauth_YYYY cookie 索引长于。以下是我对 php.ini 所做的更改:

    [suhosin]
    suhosin.cookie.max_array_index_length = 256
    suhosin.cookie.max_name_length = 1024
    suhosin.cookie.max_totalname_length = 4096
    suhosin.request.max_totalname_length = 4096
    suhosin.request.max_varname_length = 1024
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-18
      • 1970-01-01
      • 2014-02-02
      • 2013-03-05
      • 2014-02-02
      • 2020-04-01
      • 2015-04-28
      相关资源
      最近更新 更多