ホームページ  >  記事  >  バックエンド開発  >  カスタムセッションの処理読み取りおよび書き込み順序に関連する問題

カスタムセッションの処理読み取りおよび書き込み順序に関連する問題

WBOY
WBOYオリジナル
2016-06-13 12:17:45837ブラウズ

読み取りおよび書き込み順序の問題に関するカスタム セッションの処理

この投稿は、hxx_yang によって 2015-04-10 13:00:11 に最終編集されました header("content-type: text /html;charset=utf-8");

define('SESSION_PRE', 'XX_');
define('BR', '
');
function start ($savePath, $sessionName) {
global $sessionPath;
$sessionPath = $savePath .
echo __METHOD__ . BR;
return true;
}

function close () {
echo __METHOD__ . BR;
return true;
}

function read ($sessionId) {
global $sessionPath, $sessionFile;
$sessionFile = $sessionPath . ESSION_PRE . $sessionId;
echo __METHOD__ . BR;
return @file_get_contents($sessionFile);

関数 write ( $ sessionId , $data) {
global $sessionFile;
$sessionPath . $sessionId;
echo BR;
return @file_put_contents ) ;
}

function destroy ($sessionId) {
global $sessionFile;
@unlink($sessionFile);
echo __METHOD__ BR;
return true;
}

function gc ($maxLifeTime) {
echo __METHOD__ . BR;
global $sessionPath;
foreach(glob($sessionPath."/*") as $file ) {
if (filemtime($file) $maxLifeTime @unlink($file);
}
}
return true;
}
session_set_save_handler("start", "close", "read", "write", "destroy", "gc");

session_start() // 101 行目
$_SESSION['name ' ] = 'Lierei'; //102 行目
print_r($_SESSION); 関数は、start、read、write、close の順に実行されます。
公式情報: PHP は、スクリプトの実行後、または session_write_close() 関数の呼び出し後に write 関数を呼び出します。

では、このスクリプトを初めて 103 行目まで実行すると、なぜ Lilei は $_SESSION
のデータをセッション ファイルから読み取ったのかを出力します。そうであれば、スクリプトは完了していませんか?まだどうやって書き込みを実行できるのでしょうか?そうでない場合、
現時点での $_SESSION は通常の配列と同等ですか? 103 行目は通常の配列を出力しているだけですか?

-----解決策----------------------

ページは終了しておらず、session_write_close() は実行されないため、読み取られるのはメモリ内のセッション値のみです。

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