2 php session fopen curl file-get-contents
我有一个显示会话值的页面,我们称之为www.domain-a.com/master.php,如果我直接从浏览器输入,它会显示会话值.
但是当我尝试从另一个域(例如www.domain-b.com/slave.php)下载file_get_contents(或其他方法)时,它不会检索会话保护的内容,只是一个空白页面.
我知道这是因为server-b正在尝试检索内容,而不是用户...
任何人都知道如何告诉域 - 一个谁正在检索信息是用户?有一种方法来检索会话值?
问候,
何塞
Mic*_*y H 18
有一个有用的解决方案.
将PHPSESSID发送到另一台服务器没有意义,因为会话数据存储在服务器上的文件中,这就是file_get_contents阻止http服务的原因.很简单.客户端使用http连接到服务器,服务器打开文件,其中包含用于写入的会话数据.file_get_contents创建连接到同一服务器的另一个连接(另一个线程).如果设置了会话ID,则服务器会打开具有会话数据的相同文件,但此文件已打开.
所以这是一个防止这种碰撞的好方法:
$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);
Run Code Online (Sandbox Code Playgroud)
它工作正常.对对对
您可能需要在cookie中发送用户的会话ID以及请求.
如果要使用该file_get_contents功能,则必须创建一个上下文来设置cookie:
$opts = array(
'http' => array(
'method' => 'GET',
'header' => 'Cookie: PHPSESSID=0123456789abcdef0123456789abcdef'
)
);
$context = stream_context_create($opts);
echo file_get_contents('http://master.example.com/master.php', 0, $context);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16655 次 |
| 最近记录: |