为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
回首忆惘然 2023-06-18 16:04:58
我对松散耦合的方法有点陌生,但我正在尝试一下。我有一个 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 会出现与我开始时相同的超时问题。
查看完整描述

1 回答

?
森栏

TA贡献1810条经验 获得超5个赞

session_id($the_id); 在 session_start() 之前的后端上,前端和后端将无缝地使用同一个会话(您可以按照预期来回获取和设置变量)。

绝对是我所做的每一次共享 cookie、启动同一个会话等的尝试都惨遭失败。也许它适用于远程服务器,但我只是在本地主机上模拟一个前后端分离的后端。


查看完整回答
反对 回复 2023-06-18
?
holdtom

TA贡献1805条经验 获得超10个赞

session_id()on frontend的值由前端决定。on session_id()the backend 由后端决定。这些不匹配。

将前端的会话 ID 发送到后端不会授予您访问后端用户会话的权限。您需要知道后端的会话 ID,您无法在前端提取它。

有2种解决方案;

  1. 最简单的解决方案是确保后端和前端位于同一域中(例如 www.example.com 和 backend.example.com)。您可以将会话 cookie 的cookie 域.example.com设置为,这样两者将使用相同的会话 ID。

  2. 或者,客户端需要通过浏览器将后端的会话 ID 发送到前端。Jasny SSO库执行此操作。

//img1.sycdn.imooc.com/648ebad50001291905490585.jpg

查看完整回答
反对 回复 2023-06-18
  • 1 回答
  • 0 关注
  • 110 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信