我尝试访问存储在不同页面上的会话变量。当我启用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的情况下使用会话变量?
答案 0 :(得分:4)
默认情况下,PHP会话需要启用cookie。但是,它可以在没有cookie的情况下完成:PHP session without cookies。
答案 1 :(得分:4)
您需要将php.ini设置session.use_only_cookies
更改为0
,以允许在查询字符串中传递会话ID。您可能还想使用魔术常量SID
而不是session_name() . "=" . session_id()
。
答案 2 :(得分:1)
尝试将以下内容添加到.htaccess文件中:
php_flag session.use_cookies 0
答案 3 :(得分:1)
会话ID存储在cookie中。服务器怎么会知道它是同一个浏览器呢?
(这是一个棘手的问题,因为你可以在URL中保存会话ID,但这不是一个好主意。)
Cookie用于存储会话。没有它们,你就无法(安全地)存储会话。