从所有用户全局删除$ _SESSION ['layout'] ['action']!

时间:2010-04-04 19:48:08

标签: php session session-variables sessionid

好的,我正在存储一个会话变量,如果它被设置而不是调用数据库,则可以更快地加载用户布局。但由于可以通过管理员更改布局,我希望能够全局删除为所有用户设置$ _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']键。

这可能吗? 感谢

2 个答案:

答案 0 :(得分:5)

  

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

<强>错

  

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

<强>错

  

它存储在我的数据库中

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

  

这可能吗?感谢

单独保留会话,不要将其用于全局设置。

答案 1 :(得分: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');并且繁荣,这是一个“全球”变量。没有搞乱会议。

话虽这么说,如果您的会话存储在数据库中,很可能它们是序列化格式。要正确地从每个中删除特定的“全局”会话var,您必须加载每个记录,反序列化,删除变量,重新序列化并重新保存到数据库中。并且希望你不要在你正在进行这些更新时捣乱某个人的会话。