Сегодня у меня было интервью в skype для работы в качестве разработчика PHP, один из вопросов был задан о Cookies и PHP Sessions.
Вопрос состоял в том, может ли устанавливаться и читать PHP-сессия, если Cookies отключены в браузере пользователей?
Я не сказал им, что по умолчанию PHP Sessions по умолчанию зависит от настройки 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 Session зависит от установки сеанса COOKIE?
Обновление: я злился на это, поэтому я позвонил парню, с которым разговаривал. И спросил его, может ли PHP сессия работать без файлов cookie по умолчанию? Парень сказал «да». Затем я сказал ему, что он не прав, и он сказал: «Да, да, если вы так говорите …» и начните смеяться. Тогда я сказал ему, хорошо, если сессия PHP может работать без настройки cookie, как сервер знает текущий идентификатор пользователя / браузера, если он не хранится в cookie сеанса? (Я хотел узнать, знает ли он, что идентификатор сеанса может быть передан как переменная GET). И он был тихим в течение по крайней мере 20-х, и сказал мне, что он системный администратор, и что я должен спросить об этом разработчика. И что ему 43 года, и он имеет огромный опыт 13 лет в бизнесе (он начал с 30? Wtf?), Но он мне доверяет. И я объяснил ему, как работает сессия, и что вы можете использовать ее без Cookie, но затем идентификатор сеанса передается как переменная GET, и сказал ему, что я сказал им, что на собеседовании, но они не говорят мне, нет, нет …: S
Так что, в основном, у парня не было понятия о PHP и PHP-сессиях, и да, именно он спросил меня о сессиях, рассказывающих мне, что PHP Session может работать без cookie, даже когда я сказал ему, что это невозможно сделать, и что есть способ использовать сеансы PHP без файлов 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
если эти значения установлены верно, сессия будет автоматически передаваться 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