5

session_id无法在 PHP SESSIONS中获取所有列表?

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


谢谢大家的任何建议。

4

3 回答 3

3

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

一种方法是更改​​会话存储并将其移动到使用session_set_save_handler(). 您可以将所有会话存储在数据库中,并随心所欲地使用它。

于 2011-05-13T12:16:09.463 回答
2

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

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

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

于 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 回答