Table des matières
回复内容:
Maison développement back-end tutoriel php 什么情况下会调用到session_destroy()

什么情况下会调用到session_destroy()

Jun 06, 2016 pm 08:50 PM
php

访问某个页面的时候,就会产生一个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>
Copier après la connexion

其实英文的注释已经说得很明白了 ... 但如果你不想看 ... 我也可以解释给你听 ...

由于 php 的工作机制 ... 它本身不会提供 daemon 来定时扫描 session 信息并判断其是否失效 ...

当你每次调用 session_start() 时 ...

php 会根据 session.gc_probabilitysession.gc_divisor 来决定是否启用 Garbage Collector ...

Garbage Collector 顾名思义 ... 被叫做 垃圾回收器 ... 也就是俗称的 GC ...

具体一些讲 ... 在我刚刚贴的配置文件里 ...

<code>session.gc_probability = 1
session.gc_divisor = 1000
</code>
Copier après la connexion

就是说 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过期的时候。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Configuration du projet CakePHP Configuration du projet CakePHP Sep 10, 2024 pm 05:25 PM

Dans ce chapitre, nous comprendrons les variables d'environnement, la configuration générale, la configuration de la base de données et la configuration de la messagerie dans CakePHP.

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Date et heure de CakePHP Date et heure de CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Téléchargement de fichiers CakePHP Téléchargement de fichiers CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

Routage CakePHP Routage CakePHP Sep 10, 2024 pm 05:25 PM

Dans ce chapitre, nous allons apprendre les sujets suivants liés au routage ?

Discuter de CakePHP Discuter de CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

CakePHP créant des validateurs CakePHP créant des validateurs Sep 10, 2024 pm 05:26 PM

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.

See all articles