gpt4 book ai didi

php - session_start() 函数如何工作?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:55:15 27 4
gpt4 key购买 nike

请解释如何session_start()功能有效。

我不明白在 php 中启动 session 时的操作顺序。尝试解释。

HTTP 是一种客户端-服务器架构。这意味着浏览器发送请求,服务器处理请求并返回响应。这些操作中的每一个都有适当的标题。

我检查了(用 headers_list() )当我想开始 session 时服务器发回了哪些 header 及其答案。其中还有标题

Set-Cookie: PHPSESSID=7f4cbf53fbcd4717792447f32da7dba8

看起来一切正常,服务器命令浏览器设置cookie。

但是。要开始 session ,我必须包含 session_start()函数在页面代码的开头。所以这个函数是在浏览器开始解析页面的时候启动的。浏览器遇到php开始标签<?php其次是 session_start()功能。它立即将控制权委托(delegate)给服务器。而服务器现在才启动该功能。只有当它已经将包含所有 header 的页面发送到浏览器时。

所以我不明白服务器如何发送Set-Cookie在浏览器开始解析页面并满足 session_start() 之前的 header 功能?它怎么知道必须输入 Set-Cookie命令前的标题 session_start()被执行?还是我误解了流程?

最佳答案

我将使用 Apache 作为服务器来回答。

当向服务器请求页面时,Apache 将其路由到正确的文档。

如果该特定文档类型与 SAPI 相关联,则控制权将归属于该 SAPI。对于 PHP 脚本,这通常是 PHP 的 Apache 模块。

您的 PHP 然后由 SAPI 执行。当您调用 session_start() 时,PHP 会做一些事情:

  • 它检查客户端是否发送了一个以 session_name() 命名的 cookie。该 cookie 包含 session ID。如果它不存在,它会使用新的 session ID 创建它。

  • 它从 session 提供程序加载与该 session ID 关联的 session 数据(默认提供程序将 session 数据作为包含序列化 session 数据的文件存储在服务器的临时文件夹中)并使其在 $_SESSION super 全局。

  • 它注册一个关闭回调以通过提供者保存 session 数据。

然后您的脚本继续其正常的执行流程,输出被发送回 Apache 以发送给客户端。

session 完全由 SAPI 处理。 除了将控制权交给 SAPI 之外,Apache 什么都不做。

大多数 PHP 安装都启用了输出缓冲,它将所有输出( header 和正文)存储到缓冲区中,直到它被刷新到 Apache(通过 ob_flush() 显式或隐式地在您的结束时脚本)。

如果输出缓冲打开,您可以在第一次刷新之前的任何地方调用 session_start(),因为 PHP 会在发送正文之前发送 header 。

在新 session 的情况下(发送 cookie 时),客户端是否仅在页面执行后收到 session ID 无关紧要:它将在下一个请求中使用它。 session ID 是恢复 session 数据的关键。如果有人窃取了您的 session ID 而您又没有进行服务器端检查,您的 session 数据就会受到损害。

更多信息,欢迎阅读 another one of my answers.

关于php - session_start() 函数如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9560240/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com