Сеансы PHP с отключенными файлами cookie, это работает?


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

Вопрос заключался в том, можно ли установить и прочитать сеанс PHP, использовать, если файлы cookie отключены в браузере пользователя?

Я сказал им, что нет, потому что сеансы PHP по умолчанию зависят от установки файла cookie сеанса. Когда начинается сеанс PHP, новый файл cookie сеанса устанавливается с именем по умолчанию PHPSESSID, и этот файл cookie содержит значение этого идентификатора сеанса, например: ftu63d8al491s5gatuobj39gk7 Затем на сервере apache в папке tmp создается файл sess_ftu63d8al491s5gatuobj39gk7, который содержит содержимое этого сеанса, например: test1|s:12:"sessiontest1"; test2|s:12: "sessiontest2";

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

Затем я сказал им, что вы можете это сделать, но тогда идентификатор сеанса будет передан через URL как переменная GET. И это небезопасно, и вы должны это настроить в php.ini.

Они говорили о том, как вы можете использовать сеансы PHP, даже если файлы cookie отключены в браузере. А что, если мы создаем интернет-магазин, а какая-нибудь бабуля использует наш интернет-магазин и отключает файлы cookie, и ей все равно. И что сеансы PHP великолепны, потому что вы можете использовать их, даже если пользователь отключает файлы cookie. Я был как wtf, wtf wtf?!?!

Я провел тест с двумя файлами, index.php запускает сеанс и устанавливает переменные сеанса. А потом session.php пытается прочитать этот сеанс переменные.

Вот как это выглядит:

Index.php

<p>This is where I start and set php sessions.</p>

<?php

    session_start();
    $_SESSION['test1'] = "SessionTest1";
    $_SESSION['test2'] = "SessionTest2";

?>

<p>This is a link, that starts new HTTP Request, and tries to read session set on this page:</p>
<p><a href="session.php">Read Session</a></p>

Session.php

<?php

    session_start();
    var_export($_SESSION);

?>

<p><a href="index.php">Back</a></p>

Теперь, если вы включили файлы cookie в своем браузере, посетите index.php, и визит session.php , сеанс будет распечатан.

Но, если вы очистите историю своего браузера и файлы cookie, а затем посетите index.php, а затем посетить session.php, вы бы увидели пустой массив, верно?

Итак, в основном мой вопрос заключается в том, прав ли я? Можете ли вы использовать сеансы PHP, если вы отключите файлы cookie в своем браузер? И механизм сеанса PHP по умолчанию зависит от настройки файла COOKIE сеанса?

Обновление: Я сходил по этому поводу с ума, поэтому перезвонил парню, с которым разговаривал. И спросил его, может ли сеанс PHP работать без файлов cookie по умолчанию? Парень сказал "да". Тогда я сказал ему, что он ошибается, и он сказал: "Да, да, если ты так говоришь..." и начал смеяться. Затем я сказал ему, хорошо, если сеанс PHP может работать без установки cookie, как сервер узнает идентификатор текущего сеанса пользователя/браузера, если он не хранится в файл cookie сеанса? (Я хотел посмотреть, знает ли он, что идентификатор сеанса может быть передан как переменная GET) И он молчал, по крайней мере, 20 секунд, и сказал мне, что он Системный администратор, и что я должен спросить этого парня-разработчика. И что ему 43 года и у него огромный 13-летний опыт работы в бизнесе (он начинал с 30? wtf?), но в этом он мне доверяет. И я объяснил ему, как работает сеанс и что вы можете использовать его без файлов cookie, но затем идентификатор сеанса передается как переменная GET, и сказал ему, что я сказал им это на собеседовании, но они сказали мне "нет, нет, нет"... :S

Таким образом, в принципе, парень понятия не имел о PHP и сеансах PHP, и да, он был тем, кто спрашивал меня о сеансах, говоря мне, что сеанс PHP может работать без файлов cookie, даже когда я сказал ему, что это невозможно сделать, и что есть способ использовать сеансы PHP без файлов cookie, но по умолчанию он не будет работать. Он сказал: "Нет, нет, нет"... В конце он сказал мне, что, по его мнению, сеансы могут работать без файлов cookie, потому что он, как системный администратор на своих серверах, никогда не сможет видеть сеансы в папке tmp?!?!?

В любом случае, эти ребята отстой в PHP, я ни за что не приму от них предложение о работе, и после всего этого я не думаю, что они все равно предложат мне работу...

Спасибо за все комментарии!

Author: Limeni, 2012-09-25

9 answers

"Посетителю, заходящему на ваш веб-сайт, присваивается уникальный идентификатор, так называемый идентификатор сеанса. Это либо сохраняется в файле cookie на стороне пользователя , либо распространяется по URL-адресу"

.

Сессии: Введение

 25
Author: , 2012-09-24 20:14:01

Если session.use_cookies = 1 (Файл cookie включен.)

Если session.use_cookies =0 (Cookie отключен.)

Если session.use_cookies = 1, то session сохраняет идентификатор сеанса в файле cookie. Вызов session_id() позволяет получить сохраненный идентификатор сеанса из файла cookie, и сохраненные данные в массиве сеансов будут найдены на всех страницах. Если session.use_cookies = 0, в этом случае сеанс не сохраняет идентификатор сеанса в файле cookie, и вы будете получать каждый раз новый идентификатор сеанса, используя session_id() и данные сохраненные в сеансе на других страницах, не будут найдены на других страницах.

 8
Author: Ranjan, 2018-05-24 00:07:02

Да, сеанс будет работать, если файлы cookie отключены. Но сначала apache проверяет настройки конфигурации php. Например:

   --enable-trans-sid
and
   --enable-track-vars

Если это значение равно true, сеанс будет автоматически передан по ПОЧТЕ.

Если значения "--enable-trans-sid" и "--enable-track-vars" имеют значение FALSE, нам необходимо передать идентификатор сеанса с помощью константы SID.

< a href="index.php?<?= SID ?>" >Navigate from here< /a >

Необходимо установить php.ini

ini_set("session.use_cookies", 0);
ini_set("session.use_trans_sid", 1);
 5
Author: Pankaj Chauhan, 2014-09-04 14:18:23

Итак, в основном мой вопрос заключается в том, прав ли я?

В основном. В реальном мире: ДА.

Можете ли вы использовать сеансы PHP, если отключите файлы cookie в своем браузере?

Вы МОЖЕТЕ использовать сеансы PHP без файлов cookie, при условии, что идентификатор браузера каким-либо образом получен и дает уникальное значение (и это значение передается на уровень сеанса PHP):

  • идентификатор сеанса в GET (что является "стандартным" способом PHP, если файлы cookie не разрешено, и "другим" способом, который вы описали). Это значение затем автоматически распространяется PHP, например, добавляется ко всем HREF и так далее. Если он не распространяется из-за сбоя автоматического распознавания ссылок (например, сложный URL, встроенный в Javascript), вы несете ответственность за предоставление соответствующих данных.

Или - и вот мы уже не в Канзасе:

  • передано среди nonces с дайджестом аутентификации (это грязный трюк и, конечно, требует, чтобы весь сайт был за схемой аутентификации доступа с авторизацией. И вы больше не можете использовать "фиктивную аутентификацию" (т.Е. http://welcome:[email protected] ) потому что некоторые браузеры, например Internet Explorer, больше не поддерживают их по соображениям безопасности)
  • распознавание браузера каким-либо другим способом ("снятие отпечатков пальцев") ( обычно это (1) самоубийство)
  • Используйте LSO (Локальные общие объекты) для генерации случайного идентификатора UUID, если его еще нет, и сохраните его, чтобы он мог быть извлекается при последующих обращениях.
  • другие способы (см. http://en.wikipedia.org/wiki/Evercookie )

(1) если бы вы находились в локальной сети, где вы можете доверять IP-адресам, вы могли бы связать "сеанс" с IP-адресом пользователя. Вы можете применять строгую политику "без файлов cookie" в небольшой фирме и по-прежнему проводить сеансы с пользователями, не прибегая к _GET/_POST для вашего идентификатора сеанса.

 5
Author: LSerni, 2015-12-03 15:34:48

Если бы это был я, я бы сказал "Да"

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

Тогда это должно быть "да". Его можно читать и использовать.

Однако, если пользователь закроет браузер, то он исчезнет, и все. (так как этот парень не спрашивал об этой части)

 0
Author: Sruit A.Suk, 2016-02-28 10:56:06

Да.. Это будет работать
1.PHP передаст один параметр GET в URL с именем PHPSESSID, но его можно изменить session.name в файле php.ini.
2. Он добавляет один скрытый ввод в формы с тем же именем.

 0
Author: Sagar Patil, 2017-09-19 07:13:49

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

 0
Author: Amir Rezazadeh, 2018-06-17 15:52:55

Вы правы, сеанс не может работать без файлов cookie. Чтобы проиллюстрировать это, попробуйте выполнить следующие действия.

  1. Войдите В Gmail.
  2. После входа в систему отключил файлы cookie.
  3. Обновите страницу.

Вы снова будете перенаправлены на страницу входа в систему, так как сервер не может идентифицировать сеанс.

  1. Теперь снова включите файлы cookie.
  2. Обновите страницу. (Примечание: Не нажимайте на кнопку входа в систему).
  3. Вы будете автоматически перенаправлены на Почтовый ящик Gmail.

Следовательно, мы можем сказать, что без файлов cookie сеанс не будет работать.

Кроме того, если вы пытаетесь войти в gmail (в качестве примера вы можете взять любой веб-сайт) с помощью файлов cookie, то появится сообщение " В вашем браузере отключены файлы cookie. Убедитесь, что ваши файлы cookie включены, и повторите попытку."

 0
Author: Rohit Ghotkar, 2018-08-14 18:26:57

Я думаю, что есть третий способ хранения сеансов HTML5! Что, если мы сохраним данные сеанса вручную на сервере и получим всю настроенную страницу с помощью AJAX на основе идентификатора сеанса, хранящегося в хранилище сеансов?

Проблема в том, что хранилище сеансов также может быть отключено: https://stackoverflow.com/a/25050910/8460132

 -1
Author: Amir Rezazadeh, 2017-08-16 03:14:48