如何在前后端PHP之间共享SESSION?

我对松散耦合的方法有点陌生,但我正在尝试一下。我有一个 PHP 后端文件,用于接收和响应来自前端的请求。问题是前端位于https://servername.com而后端是http://localhost/backend.php


我想检查后端以确保我已验证的用户正在发出请求,但我无法弄清楚如何从前端到后端共享会话。基本上,我想知道发出请求的操作员的用户 ID,这样我就可以让后端根据访问级别适当地生成响应。


我目前正在使用 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)

等等。我关闭它,返回等等,但这永远行不通。每次我发送会话 ID 并尝试在后端恢复它时,传输都会超时。


根据我正在阅读的所有内容,恢复并不难:


if ($_REQUEST['session_id'])

   session_id($_REQUEST['session_id']);

session_start();

但它失败了。如果我不发送会话 ID,则通信有效,但我在后端没有会话信息。如果我发送 id,它每次都会超时。


注意:我尝试使用 HTTPS 将 CURL url 更改为https://localhost和 servername 但随后出现错误:请求的域名与服务器的证书不匹配。在没有 HTTPS 的情况下尝试 servername 会出现与我开始时相同的超时问题。


回首忆惘然
浏览 112回答 1
1回答

森栏

session_id($the_id); 在 session_start() 之前的后端上,前端和后端将无缝地使用同一个会话(您可以按照预期来回获取和设置变量)。绝对是我所做的每一次共享 cookie、启动同一个会话等的尝试都惨遭失败。也许它适用于远程服务器,但我只是在本地主机上模拟一个前后端分离的后端。

holdtom

session_id()on frontend的值由前端决定。on session_id()the backend 由后端决定。这些不匹配。将前端的会话 ID 发送到后端不会授予您访问后端用户会话的权限。您需要知道后端的会话 ID,您无法在前端提取它。有2种解决方案;最简单的解决方案是确保后端和前端位于同一域中(例如 www.example.com 和 backend.example.com)。您可以将会话 cookie 的cookie 域.example.com设置为,这样两者将使用相同的会话 ID。或者,客户端需要通过浏览器将后端的会话 ID 发送到前端。Jasny SSO库执行此操作。
打开App,查看更多内容
随时随地看视频慕课网APP