php session机制详解(生成机制、回收机制与存储机制)
本文详细介绍了php中session的生成机制、回收机制和存储机制的相关知识,深入理解php session的运行机制,有需要的朋友参考下。
本节内容: php session机制 php中session的用法,是很多php教程中必讲的内容,本节我们深入探讨下php中session的生成机制、回收机制与存储机制,把对session的认识提高一个层次。 以下内容由(bbs.it-home.org)收集整理,学习php,请关注本站的php编程栏目。 1、php中session的生成机制 php中是怎么生成一个session的? 设计出session的目的是保持每一个用户的各种状态来弥补http协议的不足(无状态)。 session是保存在服务器的,既然它用于保持每一个用户的状态那它利用什么来区别用户的呢?此时就得借助cookie了。 当在代码中调用session_start();时,php会同时往session的存放目录(默认为/tmp/)和客户端的cookie目录各生成一个文件。 session文件名称像这样:
格式为sess_{SESSIONID} ,这时session文件中没有任何内容,当在session_start();添加了这两行代码: $_SESSION['name'] = 'wanchun0222'; $_SESSION['blog'] = 'coderbolg.net';这时文件就有内容了: name|s:11:"wanchun0222";blog|s:13:"coderbolg.net";这时再看看cookie:
可以看到服务器为我们自动生成了一个cookie,cookie名称为"PHPSESSID",cookie内容是一串字符,其实这串字符就是{SESSIONID}。也许你已经明白了,当我们使用session时,PHP就先生成一个唯一的SESSIONID号(如2bd170b3f86523f1b1b60b55ffde0f66),再在服务器的默认目录下生成一个文件,文件名为sess_{SESSIONID},同时在当前用户的客户端生成一个cookie,内容已经说过了。这样PHP会为每一个用户生成一个SESSIONID,也就是说一个用户一个session文件。 PHP第一次为某个用户使用session时就向客户端写入了cookie,当这个用户以后访问时,浏览器会带上这个cookie,PHP在拿到cookie后就读出里面的SESSIONID,拿着这个SESSIONID去session目录下找session文件。找到后在调用$_SESSION['blog']的时候显示出来。 2、php中session的过期回收机制 理解了session的生成及工作原理,发现在session目录下会有许多session文件。 当然这些文件一定不是永远存在的,PHP一定提供了一种过期回收机制。 在php.ini中session.gc_maxlifetime为session设置了生存时间(默认为1440s)。 如果session文件的最后更新时间到现在超过了生存时间,这个session文件就被认为是过期的了。 在下一次session回收的时候就会被删除。那下一次session回收是在什么时候呢?这和php请求次数有关的。 在php内部机制中,当php被请求了n次后就会有一次触发回收机制。 到底是请求多少次触发一次是通过以下两个参数控制的: session.gc_probability = 1 session.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。 缺点:不够安全。 |

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

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

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

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

Dreamweaver CS6
视觉化网页开发工具

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

热门话题

PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸
