Почему это совместное использование файлов cookie и сеансов работает? Смущенный - PullRequest
1 голос
/ 31 августа 2011

Я не понимаю, почему это работает;

setcookie("user", $user_id, time()+604800);
session_start();
$_SESSION['user_id'] = "string";

Даже если setcookie() не содержит ссылки на $_SESSION['user_id'], когда я повторяю $_SESSION['user_id'] с другой страницы с кодом:

session_start();
echo $_SESSION['user_id'];

Он печатает string.

У меня сложилось впечатление, что setcookie() должен был ссылаться на ключ $_SESSION, чтобы он вызывался с любой страницы?

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

Любая помощь, комментарии, советы и объяснения будут оценены!

Ответы [ 3 ]

0 голосов
/ 31 августа 2011

Файлы cookie и сессии - это две совершенно разные системы.

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

session_start () создает этот уникальный идентификатор сеанса и сохраняет его в файле cookie.

$ _ SESSION ['user_id'] = 'string' устанавливает переменную на стороне сервера.

При обновлении следующей страницы он захватывает сеанс с уникального идентификатора сеанса и заполняет переменную $ _SESSION всем, что установлено в других запросах.

0 голосов
/ 31 августа 2011

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

С session_start(), с другой стороны, все обрабатывается на стороне сервера.Единственное, что отправляется в куки - это идентификатор сессии.Данные сеанса не могут напрямую обрабатываться браузером.PHP также обрабатывает предотвращение столкновений, хранение данных (которое по умолчанию представляет собой обычный текстовый файл, доступный для просмотра только для root и сохраненный в / tmp) и истечение срока действия (даже если cookie использует браузер.)

По сути, дажехотя эти функции похожи в том, что они оба посылают куки в браузер, они оба служат совершенно разным целям.

0 голосов
/ 31 августа 2011

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

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