ホームページ >バックエンド開発 >PHPチュートリアル >session_set_save_handler 関数によって生成されたセッション番号は 1 回だけ有効ですか?解決

session_set_save_handler 関数によって生成されたセッション番号は 1 回だけ有効ですか?解決

WBOY
WBOYオリジナル
2016-06-13 13:45:13934ブラウズ

session_set_save_handler 関数によって生成されたセッション番号は 1 回だけ有効ですか?
セッションデータを保存するためにsession_set_save_handlerを使用しています
生成されたセッションは一度だけ有効であることがわかりました
ページを更新すると消えます
通常割り当てられている他のセッションは正常です
何か方法はありますかこの方法で生成されたセッションが消えるのを防ぐには?

-----解決策--------------------------------
お役に立てば幸いです

void session_set_save_handler (string open, string close, string read, string write, string destroy, string gc)

この関数はユーザーレベルのセッション保存を定義できます機能 (開く、閉じる、書き込むなど)。
たとえば、この関数はセッションをローカル データベースに保存したい場合に非常に便利です。

注: この関数を使用する前に、まず php.ini ファイル session.save_hadler=user を設定する必要があります。そうしないと、session_set_save_handler() が有効になりません。

さらに、私のテストによると、そのようなセッションをページ間で使用したい場合は、セッションを使用する各スクリプト ファイルにカスタム関数と session_set_save_handler も追加する必要があります。したがって、最良の方法です。別のファイルを作成し、それをセッションを使用するすべてのスクリプトに含めることです。

次の例は、デフォルトのファイル方法と同様の、基本的なセッション保存方法を示しています。
データベースを使用したい場合、これも簡単です。

例 1. session_set_save_handler() の例


function open ($save_path, $session_name) {
global $sess_save_path, $sess_session_name;

$sess_save_path = $save_path;
$sess_session_name = $session_name;
return(true);
}

function close() {
return(true) ;
}

関数読み取り ($id) {
global $sess_save_path, $sess_session_name;

$sess_file = "$sess_save_path/sess_$id";
if ($fp = @fopen($sess_file, "r")) {
$sess_data = fread($fp, filesize($sess_file));
return($sess_data);
} else {
return("");
}

}

関数書き込み ($id, $sess_data) {
global $sess_save_path, $sess_session_name;

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

}

function destroy ($id) {
global $sess_save_path, $sess_session_name;

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

/***********************************************
* 警告 - あなたここでは *
* のようなガベージ コレクション ルーチンを実装する必要があります。 *
********************************************/
function gc ($maxlifetime) {
return true;
}

session_set_save_handler ("open", "close", "read", "write", "destroy", "gc");

session_start();

//通常どおりセッションの使用に進みます
//これで、通常どおりセッションを使用できるようになります。


?>
------解決策---------
少なくともコードスニペットを確認する必要があります
------解決策------------------
php.iniのセッションの有効期限は何ですか?
session.cache_expire = 180

ページには session_destroy() はありますが、 session_start() はありませんか?
------解決策---------
「通常割り当てられている他のセッションが通常である間」これは、セッション

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