PHP-сессия или файл cookie

Какой лучший способ сохранить пользователя, зарегистрированного на сайте с PHP, до тех пор, пока он не закроет свой браузер?

Первый и самый популярный способ – пойти с $_SESSION . Второй – передать ноль в качестве третьего аргумента функции setcookie(name, value, 0, domain); : setcookie(name, value, 0, domain);

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

Основное отличие – безопасность, потому что, если вы используете файлы cookie напрямую, клиенты могут сами просматривать и / или редактировать их, но для сеанса данные хранятся на стороне сервера, поэтому клиент не может получить доступ напрямую.

Поэтому, если данные продолжаются только для этого сеанса, я предпочитаю использовать сеанс.

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

Я предлагаю вам перейти на сеансы PHP. Это просто, и вам не нужно иметь дело с куки-файлами по своему усмотрению.

Ниже приведен код, который действительно разрушает сеанс, скопированный в примере, приведенном в руководстве по PHP.

 // Initialize the session. // If you are using session_name("something"), don't forget it now! session_start(); // Unset all of the session variables. $_SESSION = array(); // If it's desired to kill the session, also delete the session cookie. // Note: This will destroy the session, and not just the session data! if (ini_get("session.use_cookies")) { $params = session_get_cookie_params(); setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"] ); } // Finally, destroy the session. session_destroy(); 

О вашем вопросе:

Что лучше использовать, чтобы пользователь вошел в систему, пока он не закрыл свой браузер?

Не существует отказоустойчивого способа определения, когда пользователь закрыл браузер. Один из подходов состоит в том, чтобы постоянно отправлять небольшие запросы AJAX на сервер. Если запросы не просматриваются в течение длительного периода времени, уничтожьте сеанс.

Другим подходом является прослушивание выгрузки DOM Window и отправка запроса на сервер для уничтожения сеанса.

Сессия предназначена для этой цели, поэтому я бы пошел с этим.

«Сеансы не зависят от пользователя, разрешающего куки-файлы, они работают вместо того, чтобы использовать токен, позволяющий получать доступ и передавать информацию, когда пользователь открывает браузер. Проблема с сеансами заключается в том, что при закрытии браузера вы также теряете сессию. если у вас есть сайт, требующий входа в систему, это не может быть сохранено как сеанс, похожий на файл cookie, и пользователь будет вынужден повторно зарегистрироваться каждый раз, когда они посещают.

Вы можете, конечно, получить лучшее из обоих миров! Когда вы знаете, что каждый из них делает, вы можете использовать комбинацию файлов cookie и сеансов, чтобы ваш сайт работал именно так, как вы этого хотите ».

http://php.about.com/od/learnphp/qt/session_cookie.htm

Вы должны использовать $ _SESSION

Поскольку, если файлы cookie включены, то cookie будет использоваться в любом случае для идентификатора сеанса PHP. Поэтому писать другой файл cookie не является оптимальным.

Единственная причина, по которой вы захотите использовать cookie вместо сеанса, – это если вы хотите позаботиться о балансировке нагрузки. Поэтому, если у вас есть 2 сервера и один из них не работает, сеанс на этом сервере будет потерян. Теперь зарегистрированный пользователь (который имел сеанс на сервере 1) попросит вас снова войти в систему. Но если бы у него был куки-файл, ему не попросили снова войти в систему.

cookie ограничен для каждого домена, в котором вы можете установить 20 файлов cookie, а максимальный размер каждого из них – 4 КБ

Я просто использовал бы $ _SESSION . : P В любом случае, как указано выше, решите свой случай. Если вам нужно, чтобы пользователь вошел в систему некоторое время, даже после закрытия браузера, используйте cookie, но правильно. Это может быть угрозой безопасности для вас! иначе используйте сеанс.