c#在PHP中等效的TempData

我知道我可以手动显式设置和取消设置会话,但我相信这是值得问的。 在c#中,有一个名为TempData的字典,它存储数据直到第一个请求。 换句话说,当调用TempData时,它会自动取消设置。 为了更好地理解这里是一个例子:

Controller1.cs:

TempData["data"] = "This is a stored data"; 

Model1.cs:

 string dst1 = TempData["data"]; // This is a stored data string dst2 = TempData["data"]; // This string will be empty, if an exception is not raised (I can't remember well if an exception is raised) 

所以基本上,这只是一个仅供1次使用的会话。 再次,我知道我可以在php中显式设置和取消设置,但是,php是否还有像这样的function?

正如其他人指出的那样,使用会话来启用TempData。 这是一个简单的PHP实现:

 class TempData { public static function get($offset) { $value = $_SESSION[$offset]; unset($_SESSION[$offset]); return $value; } public static function set($offset, $value) { $_SESSION[$offset] = $value; } } 

测试:

 TempData::set("hello", "world"); var_dump($_SESSION); // array(1) { ["hello"]=> string(5) "world" } TempData::get("hello"); // => world var_dump($_SESSION); // array(0) { } 

不幸的是,我们无法使用静态类实现ArrayAccess。

你没有在PHP中拥有它,但它自己实现起来应该不会太难。 实际实施取决于您的确切需求。

  • 您是需要跨用户的数据还是为每个用户分开?
  • 你想让它有一个默认的到期时间吗?
  • 您是仅在活动请求中是否需要它,还是应该持续直到有人检索它?
  • “未命中”是否可接受(请参阅memcached),或者您是否希望确定在请求时找到数据?

正如@AVD所说,没有这样的命令。 我真的不明白为什么。 TempData的用途是它允许您将一些值/对象保存到服务器。

如果您确实在您的网站中使用Sessions,则不使用Session来存储这些值。 会话存储放置在服务器上,用户由每次发送到服务器的sessionid标识。

我能看到的唯一性能损失是你在运行http处理程序的进程外运行会话存储。 否则他们都在记忆中并且应该非常快。