【问题标题】:c# TempData equivalent in phpc# TempData 等效于 php
【发布时间】:2011-09-22 11:41:36
【问题描述】:

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

Controller1.cs:

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

模型1.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 是否有这样的功能?

【问题讨论】:

  • 使用 $_SESSION。 PHP 中没有这样的 tempData

标签: c# php tempdata


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 好吧,显然,在使用 $_SESSION 变量完成工作后使用 unset 将是可行的方法。感谢您的回答。
    • 请注意,会话是每个用户的。如果这就是您所需要的,是的,使用$_SESSION
    【解决方案3】:

    正如@AVD 所说,没有这样的命令。我真的不明白为什么。 TempData 的特点是它允许您保存一些值/对象,以便往返于服务器。

    如果您确实在您的网站中使用了 Session,那么不使用 Session 来存储这些值是没有问题的。会话存储在服务器上,用户由每次发送到服务器的 sessionid 标识。

    我能看到的唯一性能损失是,如果您要在运行 http 处理程序的进程之外运行会话存储。否则它们都在内存中,应该很快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-02
      • 2017-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多