【问题标题】:Removing $_SESSION['layout']['action'] globally from all users!从所有用户全局删除 $_SESSION['layout']['action'] !
【发布时间】:2011-02-04 06:18:35
【问题描述】:

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

这可能吗? 谢谢

【问题讨论】:

  • 您使用的是自定义会话处理程序吗?
  • 我真的不认为 PHP 会话是缓存此类内容的正确位置。

标签: php session session-variables sessionid


【解决方案1】:

如果您不想每次都访问数据库来加载配置数据,您可以将其缓存在生成的 .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'); 和繁荣,它是一个“全局”变量。不搞乱会话。

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

【讨论】:

  • 嗯,这是一个有趣的方法。谢谢,肯定会考虑这样做。它必须是 .inc 文件吗?只是作为另一个 php 文件可以吗?干杯:)
  • 我倾向于使用 .inc 文件来存储变量和对象定义等,并将它们存储在 webroot 之外的某个位置。但除此之外,没有。没有理由它不能是 .php 或 .whateverelse。毕竟,这只是纯文本。
【解决方案2】:

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

错误

我希望能够全局删除

错误

它正在存储到我的数据库中

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

这可能吗?谢谢

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

【讨论】:

  • 您知道如何在 php 中跨多个文件使用全局变量吗?谢谢。
  • @sologhost 很多。将其存储在数据库中。
  • 哇,呃,好的,谢谢你提供的信息,而不是......呵呵,现在真的感觉很愚蠢。你回复我这些帖子的方式让我对自己大发雷霆!干杯:)
  • 但是将它存储在数据库中有点违背了目的,因为我已经从数据库中获取信息以填充一次。问题是,如果它已经通过每次调用数据库查询来设置,我不想继续填充数组。虽然我希望能够为所有成员在某个文件中为某些功能取消设置它。好吧,也许您是对的,始终从数据库中获取比...
  • @sologhost 你只是搞砸了目的。会话目的是存储个人数据。数据库的目的是服务请求。没有单一的理由“一次”提取数据然后从其他地方提取数据。每个存储通常是相等的。因此,您不需要将数据从一个存储转移到另一个存储。数据库没问题,打算每次都查询一下
猜你喜欢
  • 2015-11-24
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-06
相关资源
最近更新 更多