LAMP 堆栈中的哪个应用程序组件设置"Set-Cookie"标头



我使用的应用程序接受三种不同类型的登录。如果客户端从某些IP地址或POST请求(从正常浏览器呈现的表单或指向读取JSON的API-endpoint)连接,则自动进行连接。

这三个选项都可以归结为调用相同的函数来将用户注册为登录用户并生成会话。

尽管据我所知,代码路径是相同的,但其中两个始终有效,而一个始终无法向响应中添加"Set Cookie"标头,即使应用程序逻辑生成了一个在响应体中发送的sessionid。

我从来没有需要深入研究会话身份验证是如何工作到这种细节水平的,我意识到我不明白其中"设置Cookie"标头来自。应用程序逻辑是否应该始终手动构建标头?一旦session_start()被调用,PHP会自动执行吗?Apache是基于头的其他部分来实现的吗?

我在使用的代码库中找不到任何带有grep -ri "set.cookie" *的内容,从而排除了1的可能性。

session_start发送一个会话缓存限制器和一个会话cookie(或使用PHPSESSID设置$_GET密钥)。

此函数用于发送Set Cookie参数。Apache将在发送回页面时将其传递回浏览器。

但是,您需要记住,存储cookie实际上是由浏览器决定的。总的来说,它们的设置不会有问题,但某些条件会阻止这种情况的发生,例如Internet Explorer中的安全设置或用户完全拒绝cookie。

进一步阅读:

http://www.php.net/manual/en/function.session-start.php

http://www.php.net/manual/en/function.session-get-cookie-params.php

http://www.php.net/manual/en/function.session-status.php

最新更新