访问某个页面的时候,就会产生一个session id,session_destroy()会在什么时候调用呢?关闭浏览器?关闭此网页?还是网页转到另一个地址?session_destroy()是会自动调用的吧?
请详细解释一下
回复内容:
访问某个页面的时候,就会产生一个session id,session_destroy()会在什么时候调用呢?关闭浏览器?关闭此网页?还是网页转到另一个地址?session_destroy()是会自动调用的吧?
请详细解释一下
首先 ... session_destory() 是一个函数 ...
这个函数在任何情况下都不会被 php 引擎自动调用 ... 只能你手工去调用 ...
php 内部存在着清理 session 的机制 ... 但与这个函数完全无关 ...
如果你想问的是什么时候该手工调用这个函数 ...答案就是在你想完全清理掉当前 session 的时候 ...
问题里面提及的几种情况 ... 不管是关闭网页也好 ... 关闭浏览器也罢 ... 甚至你把浏览器删掉重装了 ...
都不会影响到已经生成的 session ... 一言以蔽之 ... 所有浏览器行为都不会导致 session 被自动销毁 ...
那么 ... php 到底是如何清理 session 的呢 ..?
仔细去读 php.ini ... 你可以发现如下几行 ...
<code>; Defines the probability that the 'garbage collection' process is started ; on every session initialization. The probability is calculated by using ; gc_probability/gc_divisor. Where session.gc_probability is the numerator ; and gc_divisor is the denominator in the equation. Setting this value to 1 ; when the session.gc_divisor value is 100 will give you approximately a 1% ; chance the gc will run on any give request. ; Default Value: 1 ; Development Value: 1 ; Production Value: 1 ; http://php.net/session.gc-probability session.gc_probability = 1 ; Defines the probability that the 'garbage collection' process is started ; on every session initialization. The probability is calculated by using ; the following equation: gc_probability/gc_divisor. Where session.gc_probability ; is the numerator and session.gc_divisor is the denominator in the equation. ; Setting this value to 1 when the session.gc_divisor value is 100 will give you ; approximately a 1% chance the gc will run on any give request. Increasing this ; value to 1000 will give you a 0.1% chance the gc will run on any give request. ; For high volume production servers, this is a more efficient approach. ; Default Value: 100 ; Development Value: 1000 ; Production Value: 1000 ; http://php.net/session.gc-divisor session.gc_divisor = 1000 ; After this number of seconds, stored data will be seen as 'garbage' and ; cleaned up by the garbage collection process. ; http://php.net/session.gc-maxlifetime session.gc_maxlifetime = 1440 </code>
其实英文的注释已经说得很明白了 ... 但如果你不想看 ... 我也可以解释给你听 ...
由于 php 的工作机制 ... 它本身不会提供 daemon 来定时扫描 session 信息并判断其是否失效 ...
当你每次调用 session_start() 时 ...
php 会根据 session.gc_probability
和 session.gc_divisor
来决定是否启用 Garbage Collector ...
Garbage Collector 顾名思义 ... 被叫做 垃圾回收器
... 也就是俗称的 GC ...
具体一些讲 ... 在我刚刚贴的配置文件里 ...
<code>session.gc_probability = 1 session.gc_divisor = 1000 </code>
就是说 php 会有千分之一的概率会启动垃圾回收 ...
而垃圾回收的工作就是在 session 存储路径 session.save_path
下扫描所有存在的 session ...
然后用当前时间减去每个 session 的最后修改时间再跟 session.gc_maxlifetime
参数进行比较 ...
如果某个 session 的生存时间超过了 session.gc_maxlifetime
的设定值就把它销毁掉 ...
事实上这个过程完全是 php 引擎的行为 ... 和你的程序无关 ... 和用户做了什么也无关 ...
用户关闭浏览器再开 ... 因为 cookie 失效他会获得一个新的 session ...
但这并不代表他原来的 session 就被销毁了 ... 那个 session 依然在服务器上存在 ...
如果他手动把名字等于 session.name
的那个 cookie 的值改回之前的 session_id() ...
还是可以重新获得之前的那个 session 的 ...
另外一种情况 ... 如果一个用户获得 session 之后长时间没有任何动作 ...
他就可能因为其他用户触发了垃圾回收而丢失掉自己的 session ...
大体来说就是如此 ... 更加细节的东西 ... 你可以参考 php 手册上 关于垃圾回收的章节 ...
恩 ... 就是这样啦 ...
典型情况:用户注销的时候;session_id过期的时候。

PHP和Python各有优势,选择应基于项目需求。1.PHP适合web开发,语法简单,执行效率高。2.Python适用于数据科学和机器学习,语法简洁,库丰富。

PHP不是在消亡,而是在不断适应和进化。1)PHP从1994年起经历多次版本迭代,适应新技术趋势。2)目前广泛应用于电子商务、内容管理系统等领域。3)PHP8引入JIT编译器等功能,提升性能和现代化。4)使用OPcache和遵循PSR-12标准可优化性能和代码质量。

PHP的未来将通过适应新技术趋势和引入创新特性来实现:1)适应云计算、容器化和微服务架构,支持Docker和Kubernetes;2)引入JIT编译器和枚举类型,提升性能和数据处理效率;3)持续优化性能和推广最佳实践。

在PHP中,trait适用于需要方法复用但不适合使用继承的情况。1)trait允许在类中复用方法,避免多重继承复杂性。2)使用trait时需注意方法冲突,可通过insteadof和as关键字解决。3)应避免过度使用trait,保持其单一职责,以优化性能和提高代码可维护性。

依赖注入容器(DIC)是一种管理和提供对象依赖关系的工具,用于PHP项目中。DIC的主要好处包括:1.解耦,使组件独立,代码易维护和测试;2.灵活性,易替换或修改依赖关系;3.可测试性,方便注入mock对象进行单元测试。

SplFixedArray在PHP中是一种固定大小的数组,适用于需要高性能和低内存使用量的场景。1)它在创建时需指定大小,避免动态调整带来的开销。2)基于C语言数组,直接操作内存,访问速度快。3)适合大规模数据处理和内存敏感环境,但需谨慎使用,因其大小固定。

PHP通过$\_FILES变量处理文件上传,确保安全性的方法包括:1.检查上传错误,2.验证文件类型和大小,3.防止文件覆盖,4.移动文件到永久存储位置。

JavaScript中处理空值可以使用NullCoalescingOperator(??)和NullCoalescingAssignmentOperator(??=)。1.??返回第一个非null或非undefined的操作数。2.??=将变量赋值为右操作数的值,但前提是该变量为null或undefined。这些操作符简化了代码逻辑,提高了可读性和性能。


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

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

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

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

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

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