Как я могу отправить PHPSESSID в URL?

Я пытаюсь отправить PHPSESSID через переменную HTTP GET для клиента без файлов cookie.

Я видел это в различных реализациях Drupal, где ?PHPSESSIONID=123ABC добавляется к каждой ссылке, но как мне указать это в PHP и есть ли способ изменить параметр GET, чтобы он мог быть?token=123ABC или даже отправлен через HTTP POST?

Стандартный стек LAMP, работающий с Zend Framework.

Спасибо!

4 ответа

Решение

Использование куки или нет настраивается этими параметрами PHP:

  • session.use_cookies
  • session.use_only_cookies

Если первый установлен, куки будут использоваться, если это возможно.
PHP должен определить, включены ли куки-файлы или нет, и использовать их, только если они поддерживаются клиентом.


Чтобы разрешить передачу идентификатора сеанса с помощью GET вместо файлов cookie, может потребоваться активировать session.use_trans_sid, который по умолчанию отключен (что означает, что по умолчанию идентификатор сеанса передается только файлами cookie, но не GET).

Но учтите, что с этой опцией PHP будет передавать идентификатор сеанса с помощью GET, по крайней мере, для первой страницы, на которую придет каждый пользователь вашего сайта... так как сначала у него не будет cookie, и это единственный способ проверьте, поддерживают ли они куки-файлы, установив их и попытавшись прочитать их на следующей странице.
И пользователи, которые не поддерживают куки, включая поисковые системы, я бы сказал, будут иметь этот идентификатор сессии - и это нехорошо:-(


И, возможно, вы также захотите взглянуть на файл session.name, чтобы задать имя ключа (я имею в виду "token" вместо "PHPSESSID")


Для более подробной информации, вы можете взглянуть на раздел " Обработка сеансов " в руководстве:-)

Делаем это вручную:

if ($_REQUEST['token'])
  session_id($_REQUEST['token']);
session_start();

print("foo=".$_SESSION['foo']++."<br />".
      "<a href={$PHP_SELF}?token=".session_id().">link</a><br />");
print("<form method=POST>".
      "<input type=hidden name=token value=".session_id()." />".
      "<input type=submit /></form>");

Вы можете изменить PHPSESSID, используя session_name() или же session.name в вашем файле php.ini (или используя ini_set()).

Для клиентов без файлов cookie есть session.use_trans_sid Параметр php.ini - вы должны знать, что это может вызвать проблемы - например, пользователи передают URL-адреса с идентификаторами сеансов друг другу или поисковые системы выбирают такие URL-адреса.

  1. Создайте страницу входа, пользователь не должен входить без правильного идентификатора и пароля.
  2. После входа в систему пользователь приходит домой, здесь пользователь может выйти из системы и вернуться на страницу входа.
  3. Пользователь не должен получить доступ к домашней странице, не пройдя страницу входа.
Другие вопросы по тегам