Вопрос по session, url, php – Как я могу отправить PHPSESSID в URL?

6

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

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

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

Спасибо!

Вы не должны помещать идентификатор сеанса в переменные GET, это представляет угрозу безопасности. Нет соответствующего браузера, который не поддерживает куки. stefanw
Stefanw - как указано, специально для клиента без файлов cookie. Sledge

Ваш Ответ

4   ответа
1

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>");
1

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

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

0
Create a login page, the user must not login without correct id and password. After logging in the user comes to the home, here user can logout and goes back to the login page. User must not access home page without going through the login page.
9

session.use_cookies session.use_only_cookies

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


Чтобы разрешить передачу идентификатора сеанса с помощью GET вместо файлов cookie, возможно, потребуется активироватьsession.use_trans_sid, который по умолчанию отключен(Which means that, by defaut, session id is only passed by cookies -- never by GET).

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


И вы также можете взглянуть наsession.name установить название ключа(set to to "token" instead of "PHPSESSID", I mean)


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

Похожие вопросы