了解php中session垃圾回收机制
먼저 PHP에서 세션이 어떻게 생성되는지 분석해 보겠습니다. 세션을 설계하는 목적은 HTTP 프로토콜(stateless)의 단점을 보완하기 위해 각 사용자의 다양한 상태를 유지하는 것입니다. 이제 질문이 있습니다. 세션은 각 사용자의 상태를 유지하는 데 사용되므로 사용자를 구별하는 데 사용되는 것은 무엇입니까? 이 때 쿠키를 사용해야 합니다. 코드에서 session_start();를 호출하면 PHP는 SESSION 저장소 디렉터리(기본값은 /tmp/)와 클라이언트의 쿠키 디렉터리에 각각 파일을 생성합니다. 세션 파일 이름은 다음과 같습니다:
형식은 sess_{SESSIONID}입니다. 현재 세션 파일에는 다음 두 줄의 코드를 추가했습니다.
지금 쿠키를 다시 살펴보세요:
서버가 자동으로 쿠키를 생성한 것을 볼 수 있습니다. 쿠키 이름은 "PHPSESSID"이고 쿠키 내용은 문자열입니다. 실제로 이 문자열은 {SESSIONID}입니다. 어쩌면 세션을 사용할 때 PHP가 먼저 고유한 SESSIONID 번호(예: 2bd170b3f86523f1b1b60b55ffde0f66)를 생성한 다음 서버의 기본 디렉터리에 sess_{SESSIONID}라는 파일 이름으로 파일을 생성한다는 사실을 이미 알고 계실 것입니다. 동시에 현재 사용자의 클라이언트 측에 쿠키가 생성되며 해당 콘텐츠는 이미 언급되었습니다. 이러한 방식으로 PHP는 각 사용자에 대해 SESSIONID를 생성합니다. 이는 각 사용자에 대해 하나의 세션 파일을 의미합니다. PHP가 사용자를 위한 세션을 처음 사용할 때 클라이언트에 쿠키를 기록합니다. 나중에 사용자가 방문할 때 브라우저는 쿠키를 가져온 후 이 쿠키를 가져옵니다. PHP는 내부에서 SESSIONID를 읽고 이 SESSIONID를 보관합니다. 세션 파일을 찾으려면 세션 디렉터리로 이동하세요. 찾은 후 $_SESSION['blog']를 호출하면 표시됩니다.
세션의 생성 및 작동 원리를 이해하고 세션 디렉터리에 많은 세션 파일이 있음을 확인했습니다. 물론 이러한 파일은 영원히 존재해서는 안 되며 PHP는 만료된 재활용 메커니즘을 제공해야 합니다. php.ini에서 session.gc_maxlifetime은 세션의 수명을 설정합니다(기본값은 1440초). 세션 파일의 마지막 업데이트 시간이 생존 시간을 초과하면 세션 파일이 만료된 것으로 간주됩니다. 다음에 세션이 재활용되면 삭제됩니다. 다음 세션은 언제 재활용되나요? 이는 PHP 요청 수와 관련이 있습니다. PHP의 내부 메커니즘에서는 PHP가 N번 요청되면 재활용 메커니즘이 한 번 트리거됩니다. 요청이 트리거되는 횟수는 다음 두 매개변수에 의해 제어됩니다.
session.gc_probability = 1session.gc_divisor = 100
这是php.ini的默认设置,意思是每100次PHP请求就有一次回收发生。概率是 gc_probability/gc_divisor 。我们了解了服务器端的session过期机制,再来看看客户端的cookie的过期机制。
如果cookie失效了浏览器自然发送不了cookie到服务器,这时即使服务器的session文件存在也没用,因为PHP不知道要读取哪个session文件。我们知道PHP的cookie过期时间是在创建时设置的,那么PHP在创建session的同时为客户端创建的cookie的生命周期是多久呢?这个在php.ini中有设置:session.cookie_lifetime 。这个值默认是0,代表浏览器一关闭SESSIONID就失效。那就是说我们把session.gc_maxlifetime和session.cookie_lifetime设置成同一个值就可以控制session的失效时间了。
由上面的介绍我们可以知道,如果用户关闭了cookie,那我们的session就完全没法工作了。是的,确实是这样。php中session的客户端存储机制只有cookie吗?不是的。既然我们的SESSIONID 不能通过cookie传递到各个页面,那我们还有另一个法宝,就是通过页面GET传值的方式。
PHP可以在cookie被禁用时自动通过GET方式跨页传递SESSIONID,前提是设置php.ini的session.use_trans_sid为1。这时当我们在客户端禁用了cookie时使用了session,并在当前页面通过点击链接到另一页面时,PHP会自动在链接上添加SESSIONID参数,像这样:nextpage.php?SESSIONID=2bd170b3f86523f1b1b60b55ffde0f66。我想你应该看到了这种方式的缺点:好像不够安全啊。
以上是了解php中session垃圾回收机制的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

VS Code 系统要求:操作系统:Windows 10 及以上、macOS 10.12 及以上、Linux 发行版处理器:最低 1.6 GHz,推荐 2.0 GHz 及以上内存:最低 512 MB,推荐 4 GB 及以上存储空间:最低 250 MB,推荐 1 GB 及以上其他要求:稳定网络连接,Xorg/Wayland(Linux)

Linux系统的五个基本组件是:1.内核,2.系统库,3.系统实用程序,4.图形用户界面,5.应用程序。内核管理硬件资源,系统库提供预编译函数,系统实用程序用于系统管理,GUI提供可视化交互,应用程序利用这些组件实现功能。

vscode 内置终端是一个开发工具,允许在编辑器内运行命令和脚本,以简化开发流程。如何使用 vscode 终端:通过快捷键 (Ctrl/Cmd ) 打开终端。输入命令或运行脚本。使用热键 (如 Ctrl L 清除终端)。更改工作目录 (如 cd 命令)。高级功能包括调试模式、代码片段自动补全和交互式命令历史。

要查看 Git 仓库地址,请执行以下步骤:1. 打开命令行并导航到仓库目录;2. 运行 "git remote -v" 命令;3. 查看输出中的仓库名称及其相应的地址。

在 Visual Studio Code(VSCode)中编写代码简单易行,只需安装 VSCode、创建项目、选择语言、创建文件、编写代码、保存并运行即可。VSCode 的优点包括跨平台、免费开源、强大功能、扩展丰富,以及轻量快速。

虽然 Notepad 无法直接运行 Java 代码,但可以通过借助其他工具实现:使用命令行编译器 (javac) 编译代码,生成字节码文件 (filename.class)。使用 Java 解释器 (java) 解释字节码,执行代码并输出结果。

Linux的主要用途包括:1.服务器操作系统,2.嵌入式系统,3.桌面操作系统,4.开发和测试环境。Linux在这些领域表现出色,提供了稳定性、安全性和高效的开发工具。

在 Sublime 中运行代码的方法有六种:通过热键、菜单、构建系统、命令行、设置默认构建系统和自定义构建命令,并可通过右键单击项目/文件运行单个文件/项目,构建系统可用性取决于 Sublime Text 的安装情况。
