我要做的是让客户端程序的会话可用于服务器程序。
两个程序都在同一个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;
?>
行为:
这是不可能做到的?我不需要写任何cookie或获取cookie信息,我只需要服务器程序就能够访问与客户端相同的会话信息。
答案 0 :(得分:0)
经过多次搜索,我发现了原因。客户端脚本已锁定会话文件,因此服务器会话无法读取它,因此超时。更多信息:PHP Sessions - Locking and Sharing questions
因此在客户端中执行session_write_close()可以解决问题,并保留$ _SESSION变量,但是如果使用会话cookie并且输出已经发生(客户端),则会话无法在客户端上重新启动,因此此解决方案将可能不适合我。
我可能需要做的是手动序列化会话,将信息放在数据库表中,然后将密钥传递给可以读取表的服务器,然后返回时我可以从表中提取数据并更新在客户端的会话。