検索
ホームページバックエンド開発PHPチュートリアルManual_PHP チュートリアルから PHP セッション メカニズムを理解して分析する

session.save_handler = files
1. session_start()

session_start() は、セッションがファイルに保存されるため、PHP 独自のガベージ コレクションを有効にするセッションの始まりです。 SESSION リサイクルにはファイルの削除が必要です。この確率は php.ini の設定によって決まりますが、一部のシステムでは session.gc_probability = 0 になっており、確率は 0 であり、ガベージ コレクションは cron スクリプトによって実装されます。

コードをコピー コードは次のとおりです:

session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440 //デフォルトの有効期限は 24 分です
//確率はセッションです.gc_確率/session.gc_divisor 結果 1/1000、
//セッション ガベージ コレクションでは各ファイルの有効期限が切れているかどうかを確認する必要があるため、小さすぎる設定はお勧めできません。
session.save_path = //システムごとにデフォルトが異なるようです。1 つの設定は「N;/path」です。
//この場合、ガベージ コレクションは機能しないため、独自に記述する必要があります。 script
session は現在 $_COOKIE[session_name()] があるかどうかを判断します; session_name() は session_id を保存する COOKIE キーの値を返します。この値は php.ini session.name = PHPSESSID //デフォルト値 PHPSESSID から取得できます。

存在しない場合は、session_id が生成され、生成された session_id が COOKIE 値としてクライアントに渡されます。これは、次の COOKIE 操作を実行することと同じです。これは、PHP には別の関数 session_regenerate_id() があり、この関数を使用すると、以前は出力がありません。

コードをコピーします コードは次のとおりです:
setcookie(session_name(),
session_id(),
session.cookie_lifetime,//default 0
session.cookie_path,//default'/'under現在のプログラムとディレクトリ すべて有効な
session.cookie_domain、//デフォルトは空です
)

それが存在する場合、 session_id = $_COOKIE[session_name]; 次に、 session.save_path で指定されたフォルダーに移動して、 ' SESS_'。session_id() ドキュメント。ファイルの内容を読み取り、デシリアライズして、$_SESSION に配置します。


2. $_SESSION に値を割り当てます
たとえば、新しい値 $_SESSION['test'] = 'blah'; を追加すると、この $_SESSION はスクリプトの実行が終了したときにのみ保持されます。 use $ session_id で指定されたフォルダーに _SESSION の値が書き込まれ、関連するリソースが閉じられます。

この段階では、古い session_id を破棄して新しい session_id を生成するなど、session_id を変更する操作を実行できます。Drupal 匿名ユーザーのようなカスタム セッション操作やロール変換に使用されます。 SESSION の場合、ログイン後に新しい session_id を使用する必要があります。

コードをコピー コードは次のとおりです:
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time() - 42000, '/' );/ /古いセッション Cookie の有効期限が切れます
}
session_regenerate_id();//このステップでは新しい session_id が生成されます
//session_id() は新しい値を返します


3. SESSION 書き込み操作

スクリプトの最後で、SESSION 書き込み操作が実行され、$_SESSION の値が既に存在する場合と、新しいファイルに書き込まれます。を作成する必要がある場合があります。

4. SESSION を破棄します
SESSION によって送信された COOKIE は通常、インスタント COOKIE であり、ログアウトするなど、手動で有効期限を強制する必要がある場合に期限切れになります。ブラウザを閉じるには、コード内で SESSION を破棄する必要があります:

setcookie(session_name(), session_id(), time() - 8000000, ..);//ログアウトする前に実行します
usset( $_SESSION);/ /これにより、すべての $_SESSION データが削除されます。更新後、COOKIE が渡されますが、データはありません。
session_destroy();//この関数はより徹底しており、$_SESSIONを削除し、セッションファイルを削除し、session_idを削除します
ブラウザを閉じずに再度更新すると、2と3でCOOKIEが渡されますが、データが見つかりません。

session.save_handler = user
ユーザー定義のセッション処理メカニズム、より直感的 session_set_save_handler('open', 'close', 'read', 'write', 'destroy', 'gc'); open($save_path, $session_name) を実行して、セッション操作ハンドルを開きます。 session.save_handler = files の場合、$save_path は session.save_path になりますが、ユーザーがカスタマイズした場合、これら 2 つのパラメーターはどちらも使用されず、直接 TRUE が返されます。 read($id) を実行してそこからデータを読み取ります。 //このパラメータは session_id() に自動的に渡され、この値を介して操作できます。

スクリプトの実行が終了したら、write($id, $sess_data) を実行します。 //2 つのパラメーター、非常に単純です

ユーザーが session_destroy() を必要とする場合は、最初に destroy を実行し、次にステップ 2 を実行します

実践的な例:



コードをコピーします
コードは次のとおりです: //SESSION の初期化時に
function open($save_path, $session_name) を呼び出します
{
global $sess_save_path = $save_path;戻る(true);
}

//閉じるときに
function close()を呼び出す
{
return(true);

function read($id)
{
global $sess_save_path; /sess_$id" ;
return (string) @file_get_contents($sess_file);
}
//スクリプトの実行が終了する前に、書き込み操作を実行します
function write($id, $sess_data)
{
echo "sdfsf" ;
グローバル $sess_save_path;

$sess_file = "$sess_save_path/sess_$id";
if ($fp = @fopen($sess_file, "w")) {
$return = fwrite($fp, $sess_data) ;
fclose($fp );
return $return;
return(false);

関数 destroy($id)

$sess_file; sess_save_path/sess_$id" ;
return(@unlink($sess_file));
}

function gc($maxlifetime)
{
global $sess_save_path;

foreach (glob("$sess_save_path/sess_*") as $filename) {
if (filemtime($filename) + $maxlifetime @unlink($filename)
}
return true;



http://www.bkjia.com/PHPjc/323987.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/323987.html

技術記事

session.save_handler = files 1. session_start() session_start() はセッションメカニズムの始まりであり、セッションは PHP 自身のガベージであるファイルに保存されるため、一定の確率でガベージコレクションを開始します。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
游戏中打击噪音减少的键盘推荐游戏中打击噪音减少的键盘推荐Jan 05, 2024 am 10:36 AM

去推荐静音游戏键盘如果你想在游戏中享受安静的体验,可以考虑购买一款静音游戏键盘。推荐的产品有CherryMXSilent、LogitechG915和SteelSeriesApexPro等。这些键盘都具有低噪音的特点,操作轻便且响应迅速。此外,建议选择具有可调节背光亮度、可编程功能和舒适手感等特点的键盘,以满足更好的使用需求。公认最静音的键盘《杜伽K320》是一款备受喜爱的电子产品。它以其出色的性能和功能而闻名,是许多人心目中的理想之选。无论是游戏、娱乐还是办公,杜伽K320都能提供出色的表现。它

我准备去西藏旅行背包去①背多少升的包合适把你认为最好的配置说下本人170体力不错第一次我准备去西藏旅行背包去①背多少升的包合适把你认为最好的配置说下本人170体力不错第一次Jan 07, 2024 am 10:06 AM

我准备去西藏旅行背包去①背多少升的包合适把你认为最好的配置说下本人170体力不错第一次去徒步多就60升或以上的徒步少就60升以下的全程都坐车就不用背包,旅行箱更方便,真要随身带东西,弄个25~40升的就绰绰有馀西藏旅游必备用品:太阳镜、太阳帽、防晒霜、护肤霜、润唇膏、长袖上衣、毛衣;对于特殊旅游或去阿里、藏北、川藏线旅游,建议带:睡袋(防寒)、床单(防脏)、羽绒服、旅游鞋或登山鞋、拖鞋、牙刷、牙膏、毛巾、卷筒纸、纸内裤、消毒湿巾、手电筒、防水火柴、刀具、绳子。前运包能装电脑吗能装电脑,有些背包有

最近大火的Diffusion Model,首篇扩散生成模型综述!最近大火的Diffusion Model,首篇扩散生成模型综述!Apr 09, 2023 pm 08:31 PM

本综述(Diffusion Models: A Comprehensive Survey of Methods and Applications)来自加州大学&Google Research的Ming-Hsuan Yang、北京大学崔斌实验室以及CMU、UCLA、蒙特利尔Mila研究院等众研究团队,首次对现有的扩散生成模型(diffusion model)进行了全面的总结分析,从diffusion model算法细化分类、和其他五大生成模型的关联以及在七大领域中的应用等方面展开,

深入理解Linux管道的使用方法深入理解Linux管道的使用方法Feb 21, 2024 am 09:57 AM

深入理解Linux管道的使用方法在Linux操作系统中,管道是一种非常有用的功能,能够将一个命令的输出作为另一个命令的输入,从而方便地实现各种复杂的数据处理和操作。深入理解Linux管道的使用方法对于系统管理员和开发人员来说非常重要。本文将介绍管道的基本概念,并通过具体的代码示例来展示如何使用Linux管道进行数据处理和操作。1.管道的基本概念在Linux

如何正确理解PHP中的值传递方式如何正确理解PHP中的值传递方式Mar 08, 2024 pm 03:30 PM

如何正确理解PHP中的值传递方式PHP是一种广泛应用于Web开发的脚本语言,而在PHP中的参数传递方式主要有值传递和引用传递两种。而理解PHP中的值传递方式对于编写高效的代码至关重要。本文将详细讨论PHP中的值传递方式,并通过具体的代码示例来帮助读者更好地理解。值传递方式的基本概念值传递是指将变量的值复制一份传递给函数或方法,在函数内部对该值的操作不会影响到

理解Go语言注释的重要性理解Go语言注释的重要性Mar 29, 2024 pm 04:48 PM

在Go编程中,注释是一个非常重要的部分。注释可以帮助程序员更好地理解代码的逻辑、目的和细节,从而提高代码的可读性和可维护性。本文将介绍Go语言中注释的重要性,并结合具体的代码示例来说明注释对代码理解的帮助。首先,让我们来看一个简单的Go程序示例:packagemainimport"fmt"funcmain(){/

深入理解Go语言文档中的strings.Split函数深入理解Go语言文档中的strings.Split函数Nov 04, 2023 pm 01:14 PM

深入理解Go语言文档中的strings.Split函数,需要具体代码示例在Go语言中,字符串操作是非常常见的需求。其中,strings包是Go语言提供的一个标准包,提供了丰富的字符串处理函数。其中,strings.Split函数是其中一个常用的函数,它的作用是根据指定的分隔符将一个字符串拆分成一个字符串切片。在正式深入探讨strings.Split函数之前,

理解ThinkPHP6的中间件理解ThinkPHP6的中间件Jun 20, 2023 am 10:03 AM

随着现代Web应用程序的复杂性不断增加,代码逻辑也变得越来越复杂。为了解决这个问题,中间件在现代Web开发中变得越来越流行。ThinkPHP6是一个流行的PHP框架,它也支持中间件。在这篇文章中,我们将讨论ThinkPHP6中间件的基础知识和实际使用。什么是中间件?在Web开发中,中间件是指对HTTP请求和响应进行处理的一种方式。当客户端发送请求至服务器时,

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール