2017-05-29 65 views
0

問題: 我嘗試檢索JSON數據,該數據應該在我使用上一個登錄鏈接登錄後纔會返回。 之前,我可以得到JSON數據,我必須有一個鏈接初次登錄:PHP include_once鏈接導致在每個包含語句後創建不同的cookie

」 ...... server.net/System?action=login &用戶= RO &密碼= 12'

給我回到=> {「結果」:「OK」,「角色」:「管理員」} 它說,我在我登錄

具體的第二個鏈接的呼叫:

」 ......服務器.net/System?action = getAllTransfers'

給我回來=> { 「結果」: 「ERROR」, 「理」: 「無效會話ID」} 這意味着我沒有登錄

include_once('server.net/System。 ?action = login & user = ro & password = 12');

部首返回:
陣列([0] => HTTP/1.1 200 OK [1] =>服務器:Apache-狼/ 1.1 [2] =>設置Cookie:JSESSIONID = F2981D6C0C67011234B2E8B9F067FECF;路徑=/ixaropagersystem /; HttpOnly [3] =>內容長度:30 [4] =>日期:2017年5月29日星期一08:13:00 GMT [5] =>連接:關閉)


include_once ?淨/系統響應= getAllTransfers');

部首返回:
陣列([0] => HTTP/1.1 200 OK [1] =>服務器:Apache-狼/ 1.1 [2] =>設置Cookie:JSESSIONID = 62D3828A1DB0E9DE91649D6F0E8016B0;路徑=/ixaropagersystem /; HttpOnly [3] =>內容長度:48 [4] =>日期:2017年5月29日星期一08:13:00 GMT [5] =>連接:關閉)

問題是,發送正確的登錄名和密碼後,我不會保持登錄狀態,並嘗試獲取json數據。不知何故,我的PHP服務器調用第一個和第二個鏈接與PHP include_once('...')每次都從服務器獲取一個新的JSESSIONID cookie,它應該會讓我返回json數據。

問題:有沒有辦法來克服這種行爲或只是預定義cookie(jsessionId)for include_once,可以從我的php服務器發送到另一個接收jsessionId cookie的服務器?因爲我得到每一個被稱爲鏈接從另一臺服務器新的jsessionId,我不知道如何舉行會議

當我把鏈接手動放入我的Firefox,它的工作原理應該如此。但是對於include_once,它不起作用。

我不得不說,我不能設置標題允許CORS或有權更改另一臺服務器上的代碼莫名其妙。

很多Thx!

+0

雖然設置cookie,您可以設置會話cookie的路徑。這個問題可以通過session_set_cookie_params()php函數來解決。 – vartika

+0

你好vartika,謝謝你的回覆。我試圖達到的是獲取在登錄鏈接中使用的舊JSESSIONID。 session_set_cookie_params(1600,'/ System','server.net'); $ cookie = session_get_cookie_params(); while(list($ key,$ val)= each($ cookie)){ echo $ key。 ':'。 $ val。 '
'; } – RoMan

+0

或者甚至更好的如何在每個鏈接調用中總是獲得新的jsessionid並保持第一個鏈接? – RoMan

回答

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;