C # TempData эквивалент в PHP - PullRequest
       6

C # TempData эквивалент в PHP

1 голос
/ 22 сентября 2011

Я знаю, что могу явно установить и сбросить сеанс вручную, но я думаю, что стоит спросить. В 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)

Так что, по сути, это что-то вроде сеанса только для одного использования. Опять же, я знаю, что могу устанавливать и отменять явно в php, но все же, есть ли в php такая функция?

Ответы [ 3 ]

5 голосов
/ 22 сентября 2011

Как уже отмечали другие, использует сессии для включения 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 голосов
/ 22 сентября 2011

У вас этого нет в PHP, но это не должно быть слишком сложно, чтобы реализовать это самостоятельно. Фактическая реализация зависит от ваших конкретных потребностей.

  • Вам нужны эти данные по пользователям или отдельно для каждого пользователя?
  • Вы хотите, чтобы у него было время истечения по умолчанию?
  • Вы хотите, чтобы это было только в активном запросе, или оно должно сохраняться до тех пор, пока кто-то не получит его?
  • Допустимы ли "промахи" (см. Memcached) или вы хотите быть уверены, что найдете данные при запросе?
1 голос
/ 22 сентября 2011

Как говорит @AVD, такой команды нет.И я не могу понять почему.Особенность TempData заключается в том, что он позволяет вам сохранять некоторые значения / объекты для передачи туда и обратно на сервер.

Если вы используете Sessions на своем веб-сайте, нет проблем не использовать Session для хранения этих значений.Хранилище сеансов размещается на сервере, и пользователи идентифицируются идентификатором сеанса, который отправляется на сервер каждый раз.

Единственное ухудшение производительности, которое я могу видеть, - это если вы запускаете хранилище сеансов вне выполняемого процессаобработчик http.В противном случае они оба в памяти и должны быть довольно быстрыми.

...