我對松散耦合的方法有點陌生,但我正在嘗試一下。我有一個 PHP 后端文件,用于接收和響應來自前端的請求。問題是前端位于https://servername.com而后端是http://localhost/backend.php我想檢查后端以確保我已驗證的用戶正在發(fā)出請求,但我無法弄清楚如何從前端到后端共享會話。基本上,我想知道發(fā)出請求的操作員的用戶 ID,這樣我就可以讓后端根據(jù)訪問級別適當?shù)厣身憫?。我目前正在使?curl 生成這樣的請求:$ch= curl_init();curl_setopt($ch,CURLOPT_AUTOREFERER, TRUE);curl_setopt($ch, CURLOPT_POST, TRUE);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);curl_setopt($ch, CURLOPT_POST, TRUE);curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['session_id'=>session_id()]));curl_setopt($ch, CURLOPT_URL, 'http://localhost/backend.php');$response = curl_exec($ch)等等。我關閉它,返回等等,但這永遠行不通。每次我發(fā)送會話 ID 并嘗試在后端恢復它時,傳輸都會超時。根據(jù)我正在閱讀的所有內容,恢復并不難:if ($_REQUEST['session_id']) session_id($_REQUEST['session_id']);session_start();但它失敗了。如果我不發(fā)送會話 ID,則通信有效,但我在后端沒有會話信息。如果我發(fā)送 id,它每次都會超時。注意:我嘗試使用 HTTPS 將 CURL url 更改為https://localhost和 servername 但隨后出現(xiàn)錯誤:請求的域名與服務器的證書不匹配。在沒有 HTTPS 的情況下嘗試 servername 會出現(xiàn)與我開始時相同的超時問題。
1 回答

森欄
TA貢獻1810條經(jīng)驗 獲得超5個贊
session_id($the_id);?在 session_start() 之前的后端上,前端和后端將無縫地使用同一個會話(您可以按照預期來回獲取和設置變量)。
絕對是我所做的每一次共享 cookie、啟動同一個會話等的嘗試都慘遭失敗。也許它適用于遠程服務器,但我只是在本地主機上模擬一個前后端分離的后端。

holdtom
TA貢獻1805條經(jīng)驗 獲得超10個贊
session_id()
on frontend的值由前端決定。on?session_id()
the backend 由后端決定。這些不匹配。
將前端的會話 ID 發(fā)送到后端不會授予您訪問后端用戶會話的權限。您需要知道后端的會話 ID,您無法在前端提取它。
有2種解決方案;
最簡單的解決方案是確保后端和前端位于同一域中(例如 www.example.com 和 backend.example.com)。您可以將會話 cookie 的cookie 域
.example.com
設置為,這樣兩者將使用相同的會話 ID。或者,客戶端需要通過瀏覽器將后端的會話 ID 發(fā)送到前端。Jasny SSO庫執(zhí)行此操作。
- 1 回答
- 0 關注
- 188 瀏覽
添加回答
舉報
0/150
提交
取消