먼저 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中文网其他相关文章!

linux设备节点是应用程序和设备驱动程序沟通的一个桥梁;设备节点被创建在“/dev”,是连接内核与用户层的枢纽,相当于硬盘的inode一样的东西,记录了硬件设备的位置和信息。设备节点使用户可以与内核进行硬件的沟通,读写设备以及其他的操作。

区别:1、open是UNIX系统调用函数,而fopen是ANSIC标准中的C语言库函数;2、open的移植性没fopen好;3、fopen只能操纵普通正规文件,而open可以操作普通文件、网络套接字等;4、open无缓冲,fopen有缓冲。

在linux中,eof是自定义终止符,是“END Of File”的缩写;因为是自定义的终止符,所以eof就不是固定的,可以随意的设置别名,linux中按“ctrl+d”就代表eof,eof一般会配合cat命令用于多行文本输出,指文件末尾。

在linux中,可以利用“rpm -qa pcre”命令判断pcre是否安装;rpm命令专门用于管理各项套件,使用该命令后,若结果中出现pcre的版本信息,则表示pcre已经安装,若没有出现版本信息,则表示没有安装pcre。

端口映射又称端口转发,是指将外部主机的IP地址的端口映射到Intranet中的一台计算机,当用户访问外网IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上;可以通过使用动态或固定的公共网络IP路由ADSL宽带路由器来实现。

手机远程linux工具有:1、JuiceSSH,是一款功能强大的安卓SSH客户端应用,可直接对linux服务进行管理;2、Termius,可以利用手机来连接Linux服务器;3、Termux,一个强大的远程终端工具;4、向日葵远程控制等等。

linux查询mac地址的方法:1、打开系统,在桌面中点击鼠标右键,选择“打开终端”;2、在终端中,执行“ifconfig”命令,查看输出结果,在输出信息第四行中紧跟“ether”单词后的字符串就是mac地址。

linux中,lsb是linux标准基础的意思,是“Linux Standards Base”的缩写,是linux标准化领域中的标准;lsb制定了应用程序与运行环境之间的二进制接口,保证了linux发行版与linux应用程序之间的良好结合。


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

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

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

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

WebStorm Mac版
好用的JavaScript开发工具

Atom编辑器mac版下载
最流行的的开源编辑器