Ответ 1
"Посетителю, обращающемуся к вашему веб-сайту, присваивается уникальный идентификатор, так называемый идентификатор сеанса. Это либо хранится в файле cookie пользователя или распространен в URL-адресе."
Сегодня у меня было интервью в 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, я не могу согласиться с предложением о работе от них, и после всего этого я не думаю, что они все равно предложит мне работу...
Спасибо за все комментарии!
"Посетителю, обращающемуся к вашему веб-сайту, присваивается уникальный идентификатор, так называемый идентификатор сеанса. Это либо хранится в файле cookie пользователя или распространен в URL-адресе."
Если 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(), а данные, хранящиеся в сеансе на других страницах, не будут найдены на других страницах.
Итак, в основном, мой вопрос: я прав?
В основном. В реальном мире: ДА.
Можете ли вы использовать сеансы PHP, если вы отключите файлы cookie в своем браузере?
Вы можете использовать сеансы PHP без куки файлов, , пока идентификатор браузера каким-то образом получен и дает уникальное значение (и это значение передается на уровень сеанса PHP):
Или - и здесь мы больше не в Канзасе:
(1), если вы находитесь в локальной сети, где вы можете доверять IP-адресам, вы можете связать "сеанс" с IP-адресом пользователя. Вы можете применять строгую политику "без куки" в небольшой фирме и все еще иметь сеансы пользователя, не прибегая к _GET/_POST для вашего идентификатора сеанса.
Да, сеанс будет работать, когда файлы 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);
Если бы это был я, я бы сказал "Да"
Так как вы можете хранить сеанс в форме /url где-то, чтобы перейти на следующую страницу (очень плохая идея). Итак, исходя из его вопроса: "Можно ли установить PHP-сессию и прочитать ее, использовать, если Cookies отключены в браузере пользователей?"
Тогда это должно быть да. Он может читать и использовать.
Однако, если пользователь закроет браузер, то он уйдет, и что он. (так как этот парень не спросил об этой части)
Да.. Это будет работать
1.PHP передаст один параметр GET в URL с именем PHPSESSID, но его можно изменить session.name в файле php.ini.
2. Он добавляет один скрытый ввод в формы с тем же именем.
Я думаю, что есть третий способ хранения HTML5! Что делать, если мы сохраняем данные сеанса вручную на сервере и извлекаем всю настроенную страницу с помощью AJAX на основе идентификатора сеанса, хранящегося в хранилище сеансов?
Проблема заключается в том, что хранение сеанса также можно отключить: https://stackoverflow.com/a/25050910/8460132