我正在使用的应用程序接受三种不同类型的登录。如果客户端从某些IP地址或POST请求(从普通浏览器呈现的表单或JSON读取API端点)连接,则自动进行。
所有三个选项都归结为调用相同的功能来注册用户登录,并生成会话。
尽管代码路径在我能够确定的范围内是相同的,但其中两个始终有效,而其中一个始终无法添加“Set-Cookie”#39;即使应用程序逻辑生成一个在响应主体中发送的sessionid,也会对响应进行标头处理。
我从不需要深入了解会话身份验证如何工作到这个详细程度,我意识到我不明白。 其中' Set-Cookie'标题,应来自。应用程序逻辑是否应始终手动构建标头? PHP会在调用session_start()后自动执行吗? Apache是否基于标题的其他部分来做?
我排除了1,因为我未能在代码库中找到grep -ri "set.cookie" *
的任何内容。
答案 0 :(得分: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