it-swarm.com.ru

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

Сегодня у меня было собеседование по Skype для работы в качестве PHP разработчика, один из заданных вопросов касался файлов cookie и PHP сессий.

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

Я сказал им нет, beacuse PHP Сеансы по умолчанию зависит от установки cookie сессии. Когда начинается сеанс PHP, устанавливается новый файл cookie сеанса с именем по умолчанию PHPSESSID, и этот файл cookie содержит значение этого идентификатора сеанса, например: ftu63d8al491s5gatuobj39gk7 Затем на сервере Apache в папке tmp создается файл sess_ftu63d8al491s5gatuobj39gk7 и он содержит содержимое этого сеанса, например: test1 | s: 12: «SessionTest1»; test2 | s: 12: «SessionTest2»;

Они сказали мне, что это неправда, и что вы можете использовать PHP Sessions, даже если пользователь отключил куки в своем браузере. 

Затем я сказал им, что вы можете сделать это, но тогда идентификатор сессии будет передаваться через URL как переменная GET. И это небезопасно, и вы должны настроить его в php.ini.

Они говорили о том, как вы можете использовать PHP сеансы, даже если куки-файлы отключены в браузере. А что, если мы создаем интернет-магазин, и какая-то бабушка использует наш интернет-магазин и отключает куки, и ей просто наплевать. И это 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 сеансы, если вы отключаете куки в своем браузере? И do PHP Сеансовый механизм по умолчанию, зависит по настройке сеанса COOKIE?

Обновление: Я сходил с ума по этому поводу, поэтому я перезвонил парню, с которым разговаривал. И спросил его, может ли PHP сессия работать без куки по умолчанию? Парень сказал "да". Тогда я сказал ему, что он не прав, и он сказал: «Да, да, если ты так говоришь ...» и начал смеяться. Затем я сказал ему, хорошо, если PHP сеанс может работать без установки cookie, как сервер узнает идентификатор текущего сеанса пользователя/браузера, если он не сохранен в cookie сеанса? (Я хотел посмотреть, знает ли он, что идентификатор сеанса может быть передан как переменная GET) И он молчал, по крайней мере, 20 секунд, и сказал мне, что он системный администратор, и что я должен спросить этого парня разработчика. И что ему 43 года, и он имеет огромный опыт 13 лет в бизнесе (он начал с 30? Wtf?), Но он доверяет мне в этом. И я объяснил ему, как работает Session, и что вы можете использовать его без Cookie, но затем идентификатор сессии передается как переменная GET, и сказал ему, что я сказал им об этом на собеседовании, но они говорят, что нет, нет, нет ...: S 

В общем, у парня не было понятия о PHP и PHP сессиях, и да, именно он спросил меня о сессиях, сказав, что PHP Сессия может работать без куки, даже когда я сказал ему, что это невозможно, и что есть способ использовать PHP Сессии без куки, но он не будет работать по умолчанию. Он был похож, нет-нет-нет .... В конце он сказал мне, что думает, что сессии могут работать без файлов cookie, потому что он, как системный администратор на своих серверах, никогда не может видеть сессии в папке tmp?!?! ?

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

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

43
Limeni

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

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

25
user557846

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

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

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

8
Ranjan

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

   --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
Pankaj Chauhan

Так что в основном мой вопрос, я прав?

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

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

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

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

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

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

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

5
LSerni

Вы правы, сессия не может работать без файлов cookie . Чтобы проиллюстрировать это, попробуйте выполнить следующие действия.

  1. Войдите в Gmail.
  2. После авторизации куки отключены.
  3. Обновите страницу.

Вы будете перенаправлены на страницу входа снова, так как сервер не может идентифицировать сеанс.

  1. Теперь снова включите куки.
  2. Обновите страницу. (Примечание: не нажимайте кнопку входа).
  3. Вы будете автоматически перенаправлены в почтовый ящик Gmail.

Следовательно, можно сказать, что без куки сессия не будет работать.

Кроме того, если вы пытаетесь войти в gmail (например, вы можете использовать любой веб-сайт) с заблокированными файлами cookie, он будет отображаться как " В вашем браузере отключены файлы cookie. Убедитесь, что файлы cookie включены и попробуйте снова. "

0
Rohit Ghotkar

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

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

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

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

0
Sruit A.Suk

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

0
Sagar Patil

Вам нужно будет указать идентификатор сессии в URL. Вам нужно будет внести изменения в ваш файл php.ini, поэтому, если вы находитесь на общедоступном хосте, вам необходимо связаться с ними, чтобы узнать, что они сделают для вас.

0
Amir Rezazadeh