5

session_idPHP SESSIONSですべてのリストを取得することはできませんか?

注:サーバーにファイルを保持する必要があります。1つのファイルは1つのセッションに相当します。また、SESSIONの有効期限が切れた場合の古いファイルの動作を確認する必要があります。


アドバイスありがとうございます。

4

3 に答える 3

3

session.save_path他の人が答えたように、セッションはinで定義されたパスに保存され、php.iniこのディレクトリを繰り返してすべてのセッションのリストを取得できます。

別のアプローチは、セッションストレージを変更し、を使用してデータベースに移動することsession_set_save_handler()です。すべてのセッションをデータベースに保存して、好きなように操作できます。

于 2011-05-13T12:16:09.463 に答える
2

既存のすべてのセッションIDのリストを取得するためにできる最善の方法は次のとおりです。

preg_grep("/^sess_/", scandir(ini_get("session.save_path")))

しかし、それではどのファイルがまだ有効であるかはわかりません。そして、私はあなたの質問の2番目の部分を実際には得ていません。ただし、属性をプローブするために手動でシリアル化を解除することは可能です。

于 2011-05-13T11:56:18.740 に答える
1

私は古いプロジェクトでこれをやりたいと思います。

私はsession_id(次のようなもの:sessionid_some_file.tmp)でファイルに名前を付けました:

_TMP_PATH_:チェックするファイルがあるパス。

foreach(new DirectoryIterator(_TMP_PATH_) as $file)
{
    if(preg_match('/(.*)_(.*)_(.*)\.tmp/', $file->getFilename(), $data))
    {
        session_write_close();
        $session_id = $data[1];
        session_id($session_id);
        session_start();
        if(empty($_SESSION))
        {
            unlink(_TMP_PATH_ . $file->getFilename()); 
        }
    }
}
session_write_close();

foreachファイル私はsession_idを取得し、それを開いて、中に何かがあるかどうかをテストします。(各セッションが開いた後に何かを書いた)

ただし、注意してください。このコードは、実稼働環境に存在したことはありません。

于 2011-05-13T12:05:36.627 に答える