0

我尝试访问存储在不同页面上的会话变量。当我启用 cookie 时它可以工作,但是当我禁用 cookie 时会话变量消失了。

这是一个例子:

<?php
//page1.php

session_start();

$_SESSION['startTime'] = time();

echo("<a href=\"page2.php?" . session_name() . "=" . session_id() . "\">Page2</a><br />\n");

echo("Session-ID: " . session_id() . "<br />");
echo("Session-Content: " . print_r($_SESSION));

// output:
// <a href="page2.php?PHPSESSID=ou1n4mrotvqc6dod41q8t0a432">Page2</a><br />
// Session-ID: ou1n4mrotvqc6dod41q8t0a432<br />Array
// (
//     [startTime] => 1339177944
// )
// Session-Content: 1
?>

<?php
//page2.php

session_start();

session_id($_GET[session_name()]);

echo("Session-ID: " . session_id() . "<br />\n");
echo("Session-Content: " . print_r($_SESSION));

session_destroy();

// output
// Session-ID: ou1n4mrotvqc6dod41q8t0a432<br />
// Array
// (
// )
// Session-Content: 1
?>

难道我做错了什么?如何使用禁用 cookie 的会话变量?

4

4 回答 4

4

默认情况下,PHP 会话需要启用 cookie。但是,它可以在没有 cookie 的情况下完成:没有 cookie的PHP 会话

于 2012-06-08T18:05:04.107 回答
4

您需要更改 php.ini 设置session.use_only_cookies0允许在查询字符串中传递会话 ID。您可能还想使用魔法常数SID而不是session_name() . "=" . session_id().

于 2012-06-08T18:05:39.947 回答
1

尝试将以下内容添加到您的 .htaccess 文件中:

php_flag session.use_cookies 0
于 2012-06-08T18:05:42.867 回答
1

会话 ID 存储在 cookie 中。服务器怎么会知道它是同一个浏览器与之交谈?

(这是一个棘手的问题,因为您可以将会话 ID 保存在 URL 中,但这不是一个好主意)。

Cookie 用于存储会话。没有它们,您将无法(安全地)存储会话。

于 2012-06-08T18:05:50.243 回答