Отображение кэшированных данных только тем, кто не является членом, с проверкой COOKIE? (PHP) - PullRequest
0 голосов
/ 20 сентября 2009

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

Однако одна из проблем кэширования страниц заключается в том, что для того, чтобы проверить, можете ли вы показать или не показать страницу, необходимо загрузить всю систему (и пользовательскую библиотеку lib), чтобы проверить, вошел ли пользователь в систему. ( Wordpress, CodeIgniter, Drupal и др.)

Затем вы можете определить, безопасно ли показывать кэшированную версию страницы или вам следует перерисовать страницу для вошедшего в систему пользователя. И наоборот; страница, отображаемая для вошедшего в систему пользователя, не должна показываться гостю!

В любом случае, у меня наконец возникла идея, что я мог бы просто использовать if (empty ($ _ COOKIE)) для проверки пользовательской сессии, поскольку я никогда не использую URL для передачи идентификатора сессии. Затем я вспомнил, что поскольку библиотека сессий загружается на каждую страницу, она, вероятно, не будет работать, поскольку при вызове session_start () будет создаваться cookie.

У кого-нибудь есть идеи о том, как протестировать сеанс пользователя без загрузки соединения с базой данных -> для вашей библиотеки сеансов -> для вашей пользовательской библиотеки?

Ответы [ 3 ]

2 голосов
/ 20 сентября 2009

Я только недавно узнал об этом, поэтому я надеюсь, что у меня все прямо.

Чтобы получить доступ к сохраненным переменным сеанса, вы должны начать сеанс. В проекте, над которым я работаю, страницы 'user login' и 'create new user' начинаются с session_start (). Я также попытался проверить, был ли установлен файл cookie, который работал не очень хорошо. Если пользователь вошел в систему или нет, это не имеет значения, потому что будет файл cookie для обоих гостей и вошедших в систему пользователей. Если у вас есть сеанс, то у вас будет cookie (при условии, что у вас есть настройка php, что звучит так же, как и у вас) Поэтому вместо того, чтобы проверять cookie, я проверяю, установлена ​​ли переменная сеанса. Эта переменная будет установлена ​​только после успешного входа пользователя.

if (loginSuccess ()) {$ _SESSION ['login'] = "true"; }

После этого я могу теперь проверить, установлена ​​ли эта переменная сеанса, и отобразить содержимое соответствующим образом. Мой пользователь может отойти от этих страниц, вернуться назад, и он все еще будет помнить эту переменную сеанса.

Я уверен, что есть лучшие, безопасные способы сделать это.

1 голос
/ 20 сентября 2009

Вы можете установить какую-то переменную сеанса, как только пользователь войдет в систему, т.е.

//user has successfully logged in
$_SESSION['logged_in'] = true;

Затем, где-то очень рано при загрузке вашей страницы (до загрузки каких-либо библиотек) вы можете сделать:

@session_start();
if(!(isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true))
{
  //not a logged in user, show the cache!
  load_cache();  //or however this works
  exit();
}

Выйдя из системы, вы либо сделаете session_destroy(), либо $_SESSION['logged_in'] = false;

0 голосов
/ 21 сентября 2009

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

Возможно, вы могли бы установить cookie с именем "logged_out" (или "logged_in") в дополнение к сессионному cookie. Тогда вы можете проверить наличие файла cookie «logged_out» на каждой странице загрузки без необходимости загружать сеанс и базу данных?

На самом деле, поскольку у вас будут боты и другие пользовательские агенты, не относящиеся к файлам cookie, было бы лучше создать cookie "logged_in" при входе в систему, а затем везде проверять наличие ложных / несуществующих файлов cookie в качестве знака для гостя. .

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