无法在无cookie的PHP会话上访问会话变量

无法在无cookie的PHP会话上访问会话变量,php,firefox,cookies,session-state,Php,Firefox,Cookies,Session State,我正在尝试在不使用cookies的情况下使用PHP会话。我在php.ini文件中启用了session.use_trans_sid并禁用了session.use_cookies。我还禁用了firefox浏览器中的Cookie。现在,当我在页面之间导航时,我无法从上一页访问会话对象集中的变量。顺便说一句,我知道使用会话ID作为URL的一部分不是推荐的方法 我在下面提供了两个页面的示例代码片段——page1.php和page2.php。Page1.php将会话对象中的变量设置为true,page2.p

我正在尝试在不使用cookies的情况下使用PHP会话。我在php.ini文件中启用了session.use_trans_sid并禁用了session.use_cookies。我还禁用了firefox浏览器中的Cookie。现在,当我在页面之间导航时,我无法从上一页访问会话对象集中的变量。顺便说一句,我知道使用会话ID作为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>
<?php
session_start();
if ($_SESSION["name"])
{
    echo("<h1>Name set.</h1>");
}
else
{
     echo("<h1>Name NOT set.</h1>");
} 
?>

第1页
名称:

page2.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>
<?php
session_start();
if ($_SESSION["name"])
{
    echo("<h1>Name set.</h1>");
}
else
{
     echo("<h1>Name NOT set.</h1>");
} 
?>

我已经解决了这个问题。看起来php在重定向期间不会将会话ID作为重定向URL的一部分传递,即使重定向到同一网站内的页面。这就是为什么会话变量在上面的page2.php中不可用,并且输出总是“Name not set”。因此,我在page1.php上更改了我的重定向URL,将会话ID作为其中的一部分&这就成功了

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

你能给我们看一下你正在使用的一些基本代码吗?会话功能正常吗?我们可以看到标题吗?之所以看到
GET/page1.php?PHPSESSID=v08…
是因为表单第一次显示时触发了
session\u start
。第二个请求的标题是什么?@George Edison:这是我输入名称并点击submit后的标题。“GET/page1.php?PHPSESSID=v08npgulpt044a75aqnbkrbq14&user=hello HTTP/1.1”。它不工作了吗?发生了什么?在trans_sid模式下,PHP只将会话ID插入HTML(“a”链接和表单)。它不会修改任何javascript、onclick块、header()输出或外部链接的文件,例如通过“link”头的CSS。