是否有可能获得PHP SESSIONS中所有session_id
的列表?
注意: 我需要在服务器中维护一些文件。一个文件等于一个会话。如果SESSION过期,我需要确定旧文件的行为。
谢谢大家的任何建议。
答案 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,打开它并测试里面的东西。 (我在每次会议开始后都写了一些内容)
但请注意,这段代码从未出现在生产环境中。