поддержание состояния без печенья - PullRequest
5 голосов
/ 03 августа 2009

Я пытаюсь понять, как работает форум IPB.

Если я поставлю галочку «Запомнить меня», я останусь в системе, даже если закрою браузер и снова открою его.

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

edit: срок действия cookie-файла идентификатора сеанса истекает в конце сеанса, а мой браузер настроен на удаление cookie-файлов в конце сеанса.

Это означает, что когда я закрываю свой браузер (сессия заканчивается), куки-файл должен быть удален.

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

Вместо этого, если я открою свой оригинальный браузер, сессия возобновится.

Единственный другой набор файлов cookie - это файл cookie с именем pass_hash, срок действия которого истекает сразу после его создания и отправляется сервером при каждой загрузке страницы. ТАК, это не будет использоваться для аутентификации.

Ответы [ 6 ]

3 голосов
/ 03 августа 2009

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

2 голосов
/ 25 апреля 2012

Использовать браузер localStorage объект. Пример:

localStorage.setItem("lastname", "Smith");
var name = localStorage.getItem("lastname");
1 голос
/ 03 августа 2009

Есть несколько мест, где можно скрыть информацию о сеансе, кроме файлов cookie.

ключ сеанса в URL (http://example.com/app/234348738790/main)

ключ сеанса в качестве переменной GET (? Sess = 257892345)

ключ сеанса в качестве переменной POST (тип ввода = «скрытый»)

сохранить в локальном хранилище в браузере

используйте javascript с любым из вышеперечисленных для передачи информации о сеансе обратно на сервер.

1 голос
/ 03 августа 2009

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

Еще один способ, которым я могу придумать, это установить флаг в таблице Users, указывающий, что пользователь все еще вошел в систему. Возможно, в таблице есть поле с именем logged_in, и вы можете установить его в значение true. Через определенное время [то есть вы не вернетесь] оно будет сброшено до значения false.

1 голос
/ 03 августа 2009

Обычно файлы cookie сохраняются после закрытия браузера. Если вы используете PHP, проверьте set_cookie , или, если вы используете сеансы, проверьте область session .

// Set Cookie
setcookie($name, $value, $expire) 
// $expire is the time in seconds since Unix Epoch (see [time()][3]) it will stay alive
// Session
session_set_cookie_params($lifetime) 
// $lifetime is the seconds it will stay alive in seconds
0 голосов
/ 03 августа 2009

Мне кажется, что вы только что пропустили куки (или неправильно прочитали / неправильно поняли, когда он истекает), но альтернативной возможностью может быть то, что он хранит удаленный адрес в БД и автоматически создает для него новый сеанс для второго визит. Однако это было бы довольно плохим решением как с точки зрения безопасности, так и из-за NAT, и так далее - поэтому я сомневаюсь, что именно это делает IPB.

...