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不保留会话[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在laravel中重定向到外部url时如何保留会话数据

我是不是正确使用 PHP 会话在表单之间保留数据? [复制]

“Git Bash here”没有保留会话之间的 bash 历史记录 [重复]

PHP 用于在会话中保留数组的实用程序函数。

如何在curl php中发送第二个请求时保留会话?

“记住我” - 在 cookie 中保留啥? -PHP [重复]