Хранить его в Session или Query DB каждую страницу загрузки? - PullRequest
4 голосов
/ 25 февраля 2011

Какой путь лучше выбрать?

Должен ли я сохранять свой объект в сеансе и передавать его со страницы на страницу или запрашивать базу данных каждый раз, когда пользователь переносится на другую страницу в моем веб-приложении?

Если бы мне нужно было сохранить объект в сеансе, как бы я это сделал?Я пытался сделать это с сериализации и десериализации, но это не работает для меня ...

Спасибо за любую помощь!

РЕДАКТИРОВАТЬ: Вот часть моего кода

Page 1:
include "user.php";
session_start();
$user = new user();
$user->$username = "Jason";
$_SESSION["user"] = $user;
header("Location: profile.php");

Page 2:
include "user.php";
session_start();
$user = new user();
$user = $_SESSION["user"];
echo $user->$username;

Нет результатов.

Ответы [ 2 ]

8 голосов
/ 25 февраля 2011

Храните данные только в сеансе, который предназначен для конкретного пользователя. Не используйте сеанс в качестве кэша. Это может привести к плохим вещам (например, кушать тонны дискового пространства из-за дублирования данных).

Если это зависит от пользователя, то я сохраню его в сеансе, только если он достаточно мал и если вам это нужно часто (я бы не стал хранить в сеансе ничего больше, чем 10 КБ или около того). Если вам это не нужно слишком часто, не храните его.

Если это не зависит от пользователя, используйте слой кэша. Вы можете использовать необработанный APC / Memcached или слой абстракции, такой как Cache_Lite или Zend_Cache ...

1 голос
/ 25 февраля 2011

Я бы сказал:

  • Если данные часто меняются, и каждому пользователю необходимо иметь всегда актуальное значение, вы, вероятно, захотите сделать запрос из базы данных
  • Если дата не меняется или изменения не нужно видеть сразу:
    • Если данные отличаются для каждого пользователя, вы можете сохранить их в сеансе (так как сеанс для пользователя)
    • Если данные одинаковы для всех пользователей, вам следует использовать другой механизм кэширования (например, APC или memcached ) , общий для всех пользователей , чтобы избежать дублирования


Если вы сохраняете данные в сеанс, вы должны выполнить сериализацию / десериализацию самостоятельно: это уже сделано с помощью механизма сеансов (обратите внимание, что некоторые типы данных не могут быть сериализованы - см. Sessions ) .

При хранении в кеше (APC, memcached, files, ...) вам часто нужно будет сериализовать / десериализовать, потому что эти механизмы кэширования не знают, как хранить объекты PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...