0

わかりました。データベースを呼び出す代わりに、設定されている場合にユーザーレイアウトをより速くロードするために、このようなセッション変数を格納しています。ただし、管理者を介してレイアウトを変更できるため、すべてのユーザーに対して$ _SESSION['layout']['action']が設定されているすべてのセッションをグローバルに削除できるようにしたいと思います。

$_SESSION['layout']['action'] = array(a ton of indexes and mulit-dimensional arrays);

これで、データベースセッションテーブルに格納されていることがわかりました。session_id、last_update、およびdataの列があります。だから、私が持っている質問は、すべてのユーザーからそのセッション配列キー['action']を削除する方法です。

使用する

$_SESSION = array();
session_destroy();

動作しません。基本的に、session_start()はページが読み込まれるたびに読み込まれるため、['layout']からすべての['action']キーを削除したいと思います。

これは可能ですか?ありがとう

4

2 に答える 2

5

OK、ユーザーのレイアウトをロードするために、そのようなセッション変数を保存しています

間違い

すべてのセッションをグローバルに削除できるようにしたい

間違い

それは私のデータベースに保存されています

OMG「データベースを呼び出す代わりに」!

これは可能ですか?ありがとう

セッションはそのままにして、グローバル設定には使用しないでください。

于 2010-04-04T19:52:20.140 に答える
0

構成データをロードするたびにデータベースにアクセスしたくない場合は、生成された.incファイルにキャッシュできます。PHPは単なるテキストであることに注意してください。PHPスクリプトを使用して、別のPHPスクリプトを生成できます。

$fh = fopen('sitevars.inc'); // skipping error handling, since this is an example.
fwrite($fh, '<' . '?php' . "\n"); // split the <? tags in case an unbalanced ' somewhere hoses things
fwrite($fh, '$lifetheuniverse = 42;' . "\n"); // single quotes to the $ doesn't have to be escaped.
fwrite($fh, "\$layoutaction = 'slap forehead with palm';\n");
fclose($fh);

そして、あなたはただinclude_once('sitevars.inc');ブームになります、それは「グローバル」変数です。セッションをいじることはありません。

そうは言っても、セッションがデータベースに保存されている場合、それらはシリアル化された形式である可能性があります。それぞれから特定の「グローバル」セッション変数を取り除く適切な作業を行うには、各レコードをロードし、逆シリアル化し、変数を削除し、再シリアル化し、DBに再保存する必要があります。そして、これらの更新を行っているときにたまたまアクティブになっている誰かのセッションをゴミ箱に捨てないことを願っています。

于 2010-04-05T01:48:46.280 に答える