获取所有PHP session_id的列表

时间:2011-05-13 11:48:42

标签: php list session sessionid

是否有可能获得PHP SESSIONS中所有session_id的列表?

注意: 我需要在服务器中维护一些文件。一个文件等于一个会话。如果SESSION过期,我需要确定旧文件的行为。


谢谢大家的任何建议。

3 个答案:

答案 0 :(得分:3)

正如其他人已经回答的那样,会话存储在session.save_path php.ini中定义的路径中,您可以迭代此目录以检索每个会话的列表。

替代方法将更改会话存储并使用session_set_save_handler()将其移至数据库。您可以将所有会话存储在数据库中,并随意使用它。

答案 1 :(得分:2)

获取所有现有会话ID列表的最佳方法是:

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

但这不会告诉你哪些文件仍然有效。我并没有真正得到你问题的第二部分。但是可以手动反序列化它们以探测属性。

答案 2 :(得分: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,打开它并测试里面的东西。 (我在每次会议开始后都写了一些内容)

但请注意,这段代码从未出现在生产环境中。