Сегодня у меня было интервью в 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, я не могу согласиться с предложением о работе от них, и после всего этого я не думаю, что они все равно предложит мне работу...
Спасибо за все комментарии!