php 客户start函数,php – session_start()函数如何工作?

请解释session_start()函数的工作原理.

我不明白在php中启动会话时的操作顺序.试着解释一下.

HTTP是一种客户端 – 服务器架构.这意味着浏览器发送其请求,服务器处理请求并发回其答案.每个操作都有适当的标题.

我检查了(使用headers_list())当我想要启动会话时,服务器发回了什么标题.除此之外还有标题

Set-Cookie: PHPSESSID=7f4cbf53fbcd4717792447f32da7dba8

似乎一切正常,服务器命令浏览器设置cookie.

但是.要启动会话,我必须在页面代码的开头包含session_start()函数.因此,当浏览器开始解析页面时,将启动此功能.浏览器符合php开始标记

所以我不明白服务器如何在浏览器开始解析页面并满足session_start()函数之前发送Set-Cookie标头?如何知道它必须在执行命令session_start()之前放置Set-Cookie标头?或者我误解了这个过程?

解决方法:

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

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

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

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

>它检查客户端是否发送了以session_name()命名的cookie.该cookie包含会话ID.如果它不存在,则使用新的会话ID创建它.

>它从会话提供程序加载与该会话ID关联的会话数据(默认提供程序将会话数据存储在服务器的temp文件夹中,作为包含序列化会话数据的文件),并使其在$_SESSION超级全局中可用.

>它注册一个关闭回调,以通过提供程序保存会话数据.

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

会话完全由SAPI处理.除了将控制权降级到SAPI之外,Apache什么都不做.

大多数PHP安装都有输出缓冲,它将所有输出(标题和正文)存储到缓冲区中,直到它被刷新到Apache(显式地通过ob_flush()或隐式地在脚本的末尾).

如果输出缓冲打开,您可以在第一次刷新之前的任何地方调用session_start(),因为PHP将在主体之前发送标头.

在新会话(发送cookie)的情况下,客户端是否仅在页面执行后收到会话ID并不重要:它将用于下一个请求.会话ID是恢复会话数据的关键.如果有人窃取您的会话ID并且您没有服务器sode检查,那么您的会话数据将受到损害.

标签:php,session,session-cookies

来源: https://codeday.me/bug/20190714/1455833.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值