搜索
首页系统教程LINUX了解php中session垃圾回收机制

了解php中session垃圾回收机制

Aug 08, 2024 am 09:08 AM
linuxlinux教程红帽linux系统linux命令linux认证红帽linuxlinux视频

1. php
의 세션 생성 메커니즘

먼저 PHP에서 세션이 어떻게 생성되는지 분석해 보겠습니다. 세션을 설계하는 목적은 HTTP 프로토콜(stateless)의 단점을 보완하기 위해 각 사용자의 다양한 상태를 유지하는 것입니다. 이제 질문이 있습니다. 세션은 각 사용자의 상태를 유지하는 데 사용되므로 사용자를 구별하는 데 사용되는 것은 무엇입니까? 이 때 쿠키를 사용해야 합니다. 코드에서 session_start();를 호출하면 PHP는 SESSION 저장소 디렉터리(기본값은 /tmp/)와 클라이언트의 쿠키 디렉터리에 각각 파일을 생성합니다. 세션 파일 이름은 다음과 같습니다:

了解php中session垃圾回收机制

형식은 sess_{SESSIONID}입니다. 현재 세션 파일에는 다음 두 줄의 코드를 추가했습니다.

코드를 복사하세요코드는 다음과 같습니다
으아악
코드를 복사하세요코드는 다음과 같습니다
으아악

지금 쿠키를 다시 살펴보세요:

了解php中session垃圾回收机制

서버가 자동으로 쿠키를 생성한 것을 볼 수 있습니다. 쿠키 이름은 "PHPSESSID"이고 쿠키 내용은 문자열입니다. 실제로 이 문자열은 {SESSIONID}입니다. 어쩌면 세션을 사용할 때 PHP가 먼저 고유한 SESSIONID 번호(예: 2bd170b3f86523f1b1b60b55ffde0f66)를 생성한 다음 서버의 기본 디렉터리에 sess_{SESSIONID}라는 파일 이름으로 파일을 생성한다는 사실을 이미 알고 계실 것입니다. 동시에 현재 사용자의 클라이언트 측에 쿠키가 생성되며 해당 콘텐츠는 이미 언급되었습니다. 이러한 방식으로 PHP는 각 사용자에 대해 SESSIONID를 생성합니다. 이는 각 사용자에 대해 하나의 세션 파일을 의미합니다. PHP가 사용자를 위한 세션을 처음 사용할 때 클라이언트에 쿠키를 기록합니다. 나중에 사용자가 방문할 때 브라우저는 쿠키를 가져온 후 이 쿠키를 가져옵니다. PHP는 내부에서 SESSIONID를 읽고 이 SESSIONID를 보관합니다. 세션 파일을 찾으려면 세션 디렉터리로 이동하세요. 찾은 후 $_SESSION['blog']를 호출하면 표시됩니다.

2. php
의 세션 만료 재활용 메커니즘

세션의 생성 및 작동 원리를 이해하고 세션 디렉터리에 많은 세션 파일이 있음을 확인했습니다. 물론 이러한 파일은 영원히 존재해서는 안 되며 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的失效时间了。

3、php中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中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Linux与Windows的典型用例是什么?Linux与Windows的典型用例是什么?May 03, 2025 am 12:01 AM

LinuxIsideAlforCustomization,开发和ServerManagement,WhileWindowSexcelSineAsofuse,SoftWareCompatibility andgaming.linuxoffershighighighighignfigurabilityfordefordeerserersandserserservervevendingservervevelicersandervervevelopservervevelopservervevelopsetups,whereaswindowspprovidesaprovidesauser-frovideslyinlyintellyintlyintellyinterfrignlyInterFaroffacorDofroardOaforportort

Linux和Windows之间的用户帐户管理有什么区别?Linux和Windows之间的用户帐户管理有什么区别?May 02, 2025 am 12:02 AM

Linux和Windows在用户账户管理上的主要区别在于权限模型和管理工具。Linux使用基于Unix的权限模型和命令行工具(如useradd、usermod、userdel),而Windows采用自己的安全模型和图形用户界面(GUI)管理工具。

Linux的命令行环境如何使其比Windows更安全?Linux的命令行环境如何使其比Windows更安全?May 01, 2025 am 12:03 AM

Linux'scommandlinecanbemoresecurethanWindowsifmanagedcorrectly,butrequiresmoreuserknowledge.1)Linux'sopen-sourcenatureallowsforquicksecurityupdates.2)Misconfigurationcanleadtovulnerabilities.Windows'commandlineismorecontrolledbutlesscustomizable,with

如何在Linux中自动制作USB驱动器安装如何在Linux中自动制作USB驱动器安装Apr 30, 2025 am 10:04 AM

本指南说明了如何在Linux的启动下自动安装USB驱动器,从而节省了时间和精力。 步骤1:确定您的USB驱动器 使用LSBLK命令列出所有块设备。 您的USB驱动器可能会标记为 /dev /sdb1, /dev /sdc1等

2025年,最佳Linux,Windows和Mac的最佳跨平台应用程序2025年,最佳Linux,Windows和Mac的最佳跨平台应用程序Apr 30, 2025 am 09:57 AM

跨平台应用程序已彻底改变了软件开发,从而在Linux,Windows和MacOS等操作系统上实现了无缝功能。 这消除了根据您的设备切换应用程序的需求,提供一致的体验

2025年AI和机器学习的最佳Linux工具2025年AI和机器学习的最佳Linux工具Apr 30, 2025 am 09:44 AM

人工智能(AI)正在迅速改变许多部门,从医疗保健和金融到艺术和音乐等创意领域。 Linux具有开源性,适应性和性能功能,已成为首要的Platfo

5最佳轻巧的Linux发行版,不带GUI5最佳轻巧的Linux发行版,不带GUIApr 30, 2025 am 09:38 AM

寻找没有图形用户界面(GUI)的快速,最小和高效的Linux分布? 轻巧,无GUI-Linux发行版非常适合较旧的硬件或服务器和嵌入式系统(例如服务器和嵌入式系统)。他们消耗较少的res

如何在Redhat发行中安装葡萄酒10.0如何在Redhat发行中安装葡萄酒10.0Apr 30, 2025 am 09:32 AM

Wine 10.0稳定版发布:在Linux上运行Windows应用更上一层楼 Wine,这款开源免费的应用程序,让Linux用户能够在Unix/Linux类操作系统上运行Windows软件和游戏,迎来了10.0稳定版的发布!此版本已提供源代码和二进制包下载,支持Linux、Windows和Mac等多种发行版。 这一版本凝聚了一年的辛勤工作和超过8600项改进,带来了诸多令人兴奋的提升。主要亮点包括: 增强对蓝牙设备的支持。 提升对HID输入设备的支持。 优化了32位和64位应用程序的运行性能。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

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

热工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。