问题: 我尝试检索JSON数据,这应该在我使用以前的登录链接登录后返回。 在我获得json数据之前,我必须先使用上一个链接登录:
' ... server.net/System?action=login&user=ro&password=12'
给我回来=> {"结果":" OK""作用":"管理"} 这说我登录了。
特定第二个链接的调用:
' ... server.net/System?action=getAllTransfers'
给我回来=> {"结果":"错误","原因":"无效的会话ID"} 这意味着我没有登录。
include_once('?server.net/System动作=登录&安培;用户= RO&安培;密码= 12&#39);
返回的标题:
数组([0] => HTTP / 1.1 200 OK [1] =>服务器:Apache-Coyote / 1.1 [2] => Set-Cookie:JSESSIONID = F2981D6C0C67011234B2E8B9F067FECF; Path = / ixaropagersystem /; HttpOnly [3] => Content-Length:30 [4] => Date:Mon,29 May 2017 08:13:00 GMT [5] =&gt ;连接:关闭)
include_once(' server.net/System行动= getAllTransfers'?);
返回的标题:
数组([0] => HTTP / 1.1 200 OK [1] =>服务器:Apache-Coyote / 1.1 [2] => Set-Cookie:JSESSIONID = 62D3828A1DB0E9DE91649D6F0E8016B0; Path = / ixaropagersystem /; HttpOnly [3] => Content-Length:48 [4] => Date:Mon,29 May 2017 08:13:00 GMT [5] =&gt ;连接:关闭)
问题是,在发送正确的登录名和密码并尝试获取json数据后,我不会保持登录状态。不知何故,我的php服务器调用第一个和第二个链接与php include_once(' ...')每次从服务器获取一个新的JSESSIONID cookie,应该给我回json数据。
问题:有没有办法克服这种行为或只是预定义一个cookie(jsessionId)for include_once,它可以从我的php服务器发送到接收jsessionId cookie的其他服务器?因为我从每个被叫链接获得了来自其他服务器的新jsessionId,我不知道如何举行会议
当我手动将链接放入我的Firefox时,它可以正常工作。但是使用include_once它不起作用。
我必须说,我不能设置标头允许CORS或有权以某种方式更改其他服务器上的代码。
很多Thx!
答案 0 :(得分:0)
好的,最后我找到了一些正常的方法:
解决方案: 必须以这样的方式调用第二个链接:通过调用第一个链接和正确的登录过程捕获的cookie将与第二个请求一起发送。
# get the cookie
$firstLink = 'server.net/System?action=login&user=ro&password=12';
$headers = get_headers($firstLink);
$cookie = substr($headers[2], 4);
$opts = array(
'http'=>array(
'method'=>"POST",
'header'=>"Accept-language: pl\r\n" .
$cookie // == 'Cookie: JSESSIONID=B1BA33657E8DD2CD1736C10B62D61DC4\r\n'
)
);
$context = stream_context_create($opts);
# oppens the 2nd link with specific cookie in the HTTP-Header
$secondLink = 'server.net/System?action=getAllTransfers';
$expectedOutput = file_get_contents($secondLink , false, $context);
echo $expectedOutput;