session_id
无法在 PHP SESSIONS中获取所有列表?
注意:我需要在服务器中维护一些文件。一个文件等于一个会话。如果 SESSION 过期,我需要确定旧文件的行为。
谢谢大家的任何建议。
正如其他人所回答的那样,会话存储在 in 定义的路径session.save_path
中php.ini
,您可以迭代此目录以检索每个会话的列表。
另一种方法是更改会话存储并将其移动到使用session_set_save_handler()
. 您可以将所有会话存储在数据库中,并随心所欲地使用它。
获取所有现有会话 ID 列表的最佳方法是:
preg_grep("/^sess_/", scandir(ini_get("session.save_path")))
但这不会告诉您哪些文件仍然有效。我真的不明白你问题的第二部分。但是可以手动反序列化它们以探测属性。
我会在一个旧项目中这样做。
我用 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,打开它并测试里面是否有东西。(我在每个会话打开后写了一些东西)
但请注意,这段代码从未在生产环境中使用过。