【问题标题】:PHP API does not keep SESSION [duplicate]PHP API不保留会话[重复]
【发布时间】: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。

标签: php vue.js axios


【解决方案1】:

Web API 不使用您需要使用 JWT 来验证用户的会话。 Web API 已验证发送 承载令牌,验证后您可以将用户 ID 存储到 cookie 或本地存储中。 Check JWT here

谢谢

【讨论】:

    猜你喜欢
    • 2015-08-06
    • 1970-01-01
    • 2020-09-16
    • 2023-03-19
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多