Подтвердить что ты не робот

PHP-сессии с отключенными кукисами, работает ли это?

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

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

Я не сказал им, что по умолчанию 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, даже если Cookies отключены в браузере. И что, если мы создаем интернет-магазин, а какая-то бабушка использует наш интернет-магазин и отключает куки, а ей не нравится. И то, что сессии PHP отлично, потому что вы можете использовать их, даже если пользователь отключает Cookies. Я был как 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>

Теперь, если вы включите куки файлы в своем браузере, зайдите в 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 Session может работать без cookie, даже когда я сказал ему, что это невозможно сделать, и что есть способ использовать сеансы PHP без файлов cookie, но он не будет работать по умолчанию. Он был, нет, нет, нет... В конце он сказал мне, что он думал, что сеансы могут работать без файлов cookie, потому что он, как системный администратор на своих серверах, никогда не может видеть сеансы в папке tmp?!?!?

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Если session.use_cookies = 1 (Cookie включен.)

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

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

Ответ 3

Итак, в основном, мой вопрос: я прав?

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

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

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

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

Или - и здесь мы больше не в Канзасе:

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

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

Ответ 4

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

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

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

Если значения "--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

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

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

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

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

Ответ 6

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

Ответ 7

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

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