Intereting Posts
Простая PDO-обертка Как распечатать данные в этом вложенном объекте stdClass? Графические диаграммы Highcharts могут иметь ссылки на URL Каковы различия между system (), exec () и shell_exec () в PHP? Добавление динамического предложения where в запрос с разбиением на страницы в Laravel Сервер Google GCM возвращает ошибку 404 Сравнение структуры php – благодаря своим уникальным функциям Есть ли сборка мусора в PHP? Magento – customer_save_after всегда дважды запускается Как и зачем использовать фигурные скобки: return $ this -> {$ this-> action} (); Загружатель мультимедиа WordPress 3.0 изменяет мое имя файла изображения При использовании Kohana DB, как избежать дублирования кода при необходимости подсчета для разбивки на страницы? разбиение на страницы в simpledb PHP post_max_size локальное значение, переопределенное основным значением в Plesk / IIS? Запрос многих номеров отслеживания с помощью Fedex SOAP API с PHP

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

Сегодня у меня было интервью в 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):

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

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

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

(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