PHP API不保留会话[重复]
Posted
技术标签:
【中文标题】PHP API不保留会话[重复]【英文标题】:PHP API does not keep SESSION [duplicate] 【发布时间】:2020-05-21 12:56:54 【问题描述】:我正在尝试制作一个简单的登录 php API 并通过 VueJS 从 Axios 调用它。
在尝试登录时,我将 axios POST 请求发送到同一域上的所需脚本,如下所示:
axios.post("/api/open/auth/login",
data:
username: this.name,
password: this.pass
)
然后在 PHP 中,我检查来自 POST 的插入数据,如果它是正确的,我会像这样设置会话变量(文件开头有 session_start()):
$_SESSION["userID"] = $row->id_users;
$_SESSION["username"] = $row->name;
到目前为止,这工作正常,我确信这部分代码运行正常并且应该设置会话变量,但是我创建了另一个脚本,应该通过检查这些会话变量来检查用户是否登录,例如所以:
if ( isset($_SESSION["userID"]) && isset($_SESSION["username"]) )
jsonResponseOk("Session is set.");
else
jsonResponseError("Session is not set.");
这是我无法理解的,虽然应该设置会话变量,但当我之前登录时,这总是落入ELSE。
【问题讨论】:
因为您访问的是 API,所以没有“会话”的概念。 PHP 向用户返回一个会话 cookie。您需要存储该 cookie 并将其包含在后续请求中。 (对于 API,这种设计可能并不理想,无状态很重要。) @JayBlanchard 这对我来说似乎不正确,根据this thread 似乎同一域上的 ajax 请求自动包含会话 ID cookie,因此 PHP 应该能够读取基于会话数据这个ID之前设置的不是吗? @PatrikŠticha:“自动包含会话 ID cookie” - 请再次仔细阅读该问题,并注意它与您的方案有何不同。特别是诸如“我有一个用户登录到我的网站”和“他点击了一个‘保存’按钮”之类的陈述。在这种情况下,用户手动与登录功能进行交互。浏览器在响应中接收 cookie,将其保存,并将其包含在后续请求中。那不是你在做什么。您正在为初始登录发出 AJAX 请求。您需要处理响应中生成的 cookie。 【参考方案1】:Web API 不使用您需要使用 JWT 来验证用户的会话。 Web API 已验证发送 承载令牌,验证后您可以将用户 ID 存储到 cookie 或本地存储中。 Check JWT here
谢谢
【讨论】:
以上是关于PHP API不保留会话[重复]的主要内容,如果未能解决你的问题,请参考以下文章
我是不是正确使用 PHP 会话在表单之间保留数据? [复制]