0

好的,我正在存储一个这样的会话变量,以便在设置而不是调用数据库时更快地加载用户布局。但是由于可以通过管理员更改布局,我希望能够全局删除为所有用户设置了 $_SESSION['layout']['action'] 的所有会话。

$_SESSION['layout']['action'] = array(a ton of indexes and mulit-dimensional arrays);

现在,我知道它已存储到我的数据库会话表中,其中有一列用于 session_id、last_update 和 data。所以,我的问题是如何从所有用户中删除该会话数组键 ['action']。

使用

$_SESSION = array();
session_destroy();

不工作。基本上,每次页面加载都会加载 session_start(),所以我只想从 ['layout'] 中删除所有 ['action'] 键。

这可能吗?谢谢

4

2 回答 2

5

好的,我正在存储一个会话变量来加载用户布局

错误的

我希望能够全局删除所有会话

错误的

它被存储到我的数据库中

OMG “t 而不是调用数据库”!

这可能吗?谢谢

不理会会话,不要将其用于全局设置。

于 2010-04-04T19:52:20.140 回答
0

如果您不想每次都访问数据库来加载配置数据,您可以将其缓存在生成的 .inc 文件中。请记住,PHP 只是文本 - 您可以使用 PHP 脚本生成另一个 PHP 脚本:

$fh = fopen('sitevars.inc'); // skipping error handling, since this is an example.
fwrite($fh, '<' . '?php' . "\n"); // split the <? tags in case an unbalanced ' somewhere hoses things
fwrite($fh, '$lifetheuniverse = 42;' . "\n"); // single quotes to the $ doesn't have to be escaped.
fwrite($fh, "\$layoutaction = 'slap forehead with palm';\n");
fclose($fh);

然后你就include_once('sitevars.inc');繁荣了,它是一个“全局”变量。没有弄乱会话。

话虽如此,如果您的会话存储在数据库中,它们很可能是序列化格式。要正确地从每个记录中剥离特定的“全局”会话变量,您必须加载每个记录、反序列化、删除变量、重新序列化并重新保存到数据库中。并希望您不要破坏在您进行这些更新时碰巧处于活动状态的某人的会话。

于 2010-04-05T01:48:46.280 回答