【问题标题】:Pass session information to PHP via curl通过 curl 将会话信息传递给 PHP
【发布时间】:2014-12-19 19:07:39
【问题描述】:

我想要做的是让来自客户端程序的会话对服务器程序可用。

两个程序都运行在同一个 Apache 站点上,所以会话文件、权限等的配置都是一样的。

测试服务器程序:

<?php
session_name('main');
session_start();
echo '<pre>'.print_r($_COOKIE, true).'</pre>';
?>

测试客户端程序:

<?php
session_name('main');
session_start();
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_COOKIE, 'main='.session_id());
curl_setopt($ch, CURLOPT_POSTFIELDS, 'A=1&B=2');
$result=curl_exec($ch);
curl_close($ch);
echo $result;
?>

行为:

  • 如前所述,对服务器的 curl 调用超时。
  • 如果我从服务器中删除 session_start(),服务器会按预期返回 cookie 值。
  • 当我从客户端删除 curl_setopt($ch, CURLOPT_COOKIE, 'main='.session_id()) 时,每次调用服务器都会按预期创建一个新的会话文件。
  • 我添加了 curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile) 确保 $cookiefile 存在并且是可写的,行为没有变化。

所以这是不可能的吗?我不需要写任何 cookie 或取回 cookie 信息,我只需要服务器程序能够访问与客户端相同的会话信息。

【问题讨论】:

    标签: php session curl cookies


    【解决方案1】:

    经过大量搜索后,我发现了原因。客户端脚本锁定了会话文件,因此服务器会话无法读取它,因此超时。更多内容:PHP Sessions - Locking and Sharing questions

    所以在客户端执行 session_write_close() 可以解决问题,并保持 $_SESSION 变量不变,但是如果使用会话 cookie 并且输出已经发生(客户端),则无法在客户端上重新启动会话,因此此解决方案将可能不适合我。

    我可能需要做的是手动序列化会话,将信息放入数据库表中,并将密钥传递给可以读取表的服务器,然后在返回时我可以从表中提取数据并更新客户端中的会话。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-06
      • 2016-11-24
      • 2011-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多