検索
ホームページphp教程php手册ファイルストレージに基づいたSessionクラスを実装する

session

我没事的时候写的自主实现Session功能的类,基于文件方式存储Session数据,测试基本通过,还比较好玩,实际应用没有意义,只不过是学习Session是如何实现的。

一般基于文件存储Session数据效率不是很高,毕竟跟磁盘IO是有关系的,如果需要多台服务器共享数据,可以考虑使用NFS来存储数据,如果需要比较快的速度,可以考虑使用共享内存(shm)来保存数据,直接把Session数据存储路径指定为/dev/shm,这样磁盘IO会提高不少,不过shm空间比较小,一般Linux下是60多M,所以不可能保存太多数据。

 

 

php
//================================= == =====
// プログラム: ファイルベースのセッションクラス
// 機能: ファイルストレージに基づくセッション関数クラス
// 著者: heiyeluren
// ブログ: http://blog.csdn.net/ heiyeshuwu
// 時間: 2006-12-22
//=================================== ==== =



/**
* クラス名: FileSession Class
* 機能: ファイルストレージに基づいたセッション機能を独自に実装する
* 説明: このクラスは機能を実現します基本的に、クライアントの Cookie を設定してセッション ID を保存し、
* 次にサーバー側でユーザーのデータを保存し、最後に Cookie 内のセッション ID を使用してデータがユーザーに属するかどうかを判断し、
* そして現状の欠点はガベージコレクション機能がないことです
*
* この方法は、通常のファイル、共有メモリ (SHM)、NFS サーバーなどのファイル保存方法に保存することをお勧めします。共有
* メモリに保存します。共有メモリのアクセス効率は比較的高いためですが、スペースが比較的小さいため、
=
''
;
var
$ sessSavePath = '/tmp/'
;
var $isCreatePath = tru​​e ; var
$ $sessexpiretime='''; /** * コンストラクター
*
* @param bool $isInit - オブジェクトのインスタンス化時にセッションを開始するかどうか
*/
functionFileSession($isInit= false ){
if ($isInit){
//--------- ----------------外部メソッド:



/**
* セッション操作の開始

*/

function start(

$expireTime

=
0){ $sessId = $_COOKIE [
$this-> cookieName]; if $ this>_checksavepath()){$ this&>
sesssavepath
'); } sessId =
$this-> _getId();            $this->sessExpireTime = ($expireTime > 0) ? 時間() + $expireTime : 0;
setcookie($this- >クッキー名 $this ->sessId, $this->sessExpireTime, "/" '');            
$_SESSION = array();
$this-> _writeFile();
}
else {
$this ->sessId = $sessId;
$_SESSION = シリアル化解除($this->_getFile( $sessId));
}
}

/**
* 特定のセッション量が注釈かどうか判断します
*
* @param string $varName -
* @return bool 存在戻りtrue,存在しない戻りfalse
*/
function is_registered($varName){
if (!isset($_SESSION[$varName])){
false;
本当
; } } /**
* セッション変数を登録します
*
* @param string $varName - Sessionとして登録する必要がある変数名
* @parammixed $varValue - 値として登録しますセッション変数の * @return bool - 変数名はすでに存在しており、 false を返します。登録が成功した場合は true を返します
*/




function
register($var名前
$varValue){ return false
;
} $_SESSION[$varName ] = $varValue
;; - >_WriteFile(); ]);

$ this
->_writeFile();returntru​​e

; ->
_writeFile(); return



tru​​e
}
/**
; * 登録されたセッション変数値を取得します
* * @param string $varName - Se ssion 変数の名前 * @returnmixed - 存在しません 変数は false を返し、既存の変数は変数値を返します !isset( $_SESSION
[
$varName [ ]; }
/** * すべてのセッション変数を取得します */


function getAll(){

Return


$ _Session; }
/***現在のセッションIDを取得します**@Return String
関数
getSid (){return $this->sessId;
}

/**
* サーバー側に保存されているセッションデータへのパスを取得します
*
* @return stringセッション パスの保存
sessSavePath; }
/*
* * セッションデータを保存するパスを設定します avePath
){ $ this->sessSavePath =


$savePath; }



// -------内部インターフェース
* * セッション ID を生成します * * @return string 32 ビットのセッション ID を返します */
_getI d(){
(uniqid(microtime) ())); }
/*

*
*
* @return bool 正常に true を返します*/

->
sessSavePath)){
本当
; }if (!$this->isCreatePath){
mkdir ($) this
->
sessSavePath)){ '失敗: セッション キャッシュ パス ' . $this->sessSavePath .
' が存在しません。作成に失敗しました' ); } @ chmod($this ->sessSavePath, 0777); /** * セッションファイルデータを取得します
d
= '){ )?$this- >
sessId : $sessId
;
$sessFile= $this->sessSavePath .$this-> sessFilePrefix . $sessId ;
->_showMessage('失敗: セッション ファイル '.
$sessFile
.'存在しません') ; } return file_get_contents($sessFile ); }
/*
* * 現在のセッションデータを書き込みますデータファイル * * @ param string $sessId - セッションID * @return 正常に true を返します */
function

_writeFile(
$sessId

=


''){
$sess Id= ($sessId ==
''
)?$this ->sessId :$sessId ; $this->sessSavePath . $this->sessFilePrefix
$ sessId;        $sessStr = serialize($_SESSION);
if () !$fp = @fopen ($sessFile, "w+")){
$this-> _showMessage('失敗: セッションを開く 保存ファイル '. $sessFile .' 失敗しました');
}
}
if (!@fwrite ($fp, $sessStr
)){ $this->_showMessage(' 失敗: セッションデータを'に書き込みます. $sessFile .' 失敗しました'

);
} @fclose ($fp
); 戻る true

;
}
/*

*
* 显表示情報
*
* @param string $strMessage - 表示が必要な情報内容
* @param bool $isFailed - 否か失败情報, 缺省はtrue */
function _showMessage($strMessage, $isFailed ) = tru​​e
){ if ($は失敗しました
🎜){🎜            
exit($strMessage);
}
echo $strMessage;
}
}
?>




声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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ヘンタイを無料で生成します。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい