php - session 数据的 file_get_contents(或 curl 或 fopen)问题

标签 php session curl fopen file-get-contents

我有一个显示 session 值的页面,我们称它为 www.domain-a.com/master.php,如果我直接从浏览器输入它,它会显示 session 值。

但是当我尝试使用 file_get_contents(或其他方法)从另一个域(如 www.domain-b.com/slave.php)下载它时,它不会检索受 session 保护的内容,只是一个空白页。

我知道这是因为服务器 b 正在尝试检索内容,而不是用户...

任何人都知道如何告诉域-a 谁在检索信息是用户?有办法检索 session 值吗?

问候,

何塞

最佳答案

有一个有用的解决方案。

将 PHPSESSID 发送到另一台服务器没有意义,因为 session 数据存储在服务器上的文件中,这就是 file_get_contents 阻止 http 服务的原因。很简单。客户端使用 http 连接到服务器,服务器当然会打开包含 session 数据的文件以进行写入。 file_get_contents 创建连接到同一服务器的另一个连接(另一个线程)。如果设置了 session ID,则服务器会打开包含 session 数据的同一文件,但该文件已经打开。

所以这里有一个很好的解决方案可以防止这种碰撞:

$opts = array( 'http'=>array( 'method'=>"GET",
              'header'=>"Accept-language: en\r\n" .
               "Cookie: ".session_name()."=".session_id()."\r\n" ) );

$context = stream_context_create($opts);
session_write_close();   // this is the key
$obsah = file_get_contents( 'http://blablabla.cz', false, $context);

它工作正常。对对对

关于php - session 数据的 file_get_contents(或 curl 或 fopen)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/766109/

相关文章:

php - 自动按计划打印 pdf

php - 如果 $_POST ['value' ] 在数据库中,弹出警报的最佳方法是什么?

c# - 如何检测当前 session 是否通过 RDP 启动?

php - 代码点火器 2.1.3 : sess_destroy() causes Undefined index: session_id etc notice when 'sess_use_database' == TRUE

php - 如何阻止自定义论坛/博客上的垃圾邮件?

c# - 如何将枚举值保存到 session

ruby-on-rails - 在 Windows 中设置 Curb

php - 如何获取 cURL 获取的最后一个 URL?

docker - 无法在docker-swarm上 curl traefik仪表板

javascript - 使用 Jquery 和 AJAX 进行表单验证