c#TempData等效于php

时间:2011-09-22 11:41:36

标签: 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是否有类似这样的功能?

3 个答案:

答案 0 :(得分:5)

正如其他人所指出的,使用会话来启用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。

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

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

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