Невозможно получить доступ к переменной сеанса для файлов cookie без сеансов PHP - PullRequest
0 голосов
/ 15 апреля 2010

Я пытаюсь использовать сеанс PHP без использования файлов cookie. Я включил session.use_trans_sid и отключил session.use_cookies в моем файле php.ini. Я также отключил куки в моем браузере Firefox. Теперь, когда я перемещаюсь между страницами, я не могу получить доступ к переменной в объекте сеанса, установленном с предыдущей страницы. Кстати, я знаю, что использование идентификаторов сеансов в качестве части URL-адреса не рекомендуется.

Ниже приведен пример кода ниже для двух страниц - page1.php и page2.php. Page1.php устанавливает переменную в объекте сеанса в значение true, а page2.php проверяет значение этой переменной и предпринимает соответствующие действия.

page1.php

<?php
session_start();
if (isset($_REQUEST["user"]))
{
    $_SESSION["name"] = true;
    $host = $_SERVER["HTTP_HOST"];
    $path = dirname($_SERVER["PHP_SELF"]);
    header("Location: http://$host$path/page2.php");
    exit;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Page1</title>
</head>
<body>
<form method="get" action="/page1.php">
Name:<input type="text" name="user"/><br/>
<input type="submit" value="Login"/><br/>
</form>
</body>
</html>

page2.php

<?php
session_start();
if ($_SESSION["name"])
{
    echo("<h1>Name set.</h1>");
}
else
{
     echo("<h1>Name NOT set.</h1>");
} 
?>

1 Ответ

1 голос
/ 15 апреля 2010

Я решил проблему. Похоже, что php не будет передавать идентификатор сеанса во время перенаправления как часть URL-адреса перенаправления, даже если перенаправление относится к странице на том же веб-сайте. Вот почему переменная сеанса не была доступна в page2.php выше, и вывод всегда был «Имя НЕ установлено». Поэтому я изменил свой URL для переадресации на page1.php, чтобы иметь идентификатор сессии как его часть, и это помогло.

$sid = session_name() . "=" . session_id();
header("Location: http://$host$path/page2.php?$sid");
...