Как я могу отправить 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-адреса.
- Создайте страницу входа, пользователь не должен входить без правильного идентификатора и пароля.
- После входа в систему пользователь приходит домой, здесь пользователь может выйти из системы и вернуться на страницу входа.
- Пользователь не должен получить доступ к домашней странице, не пройдя страницу входа.