没有cookie的php会话变量

时间:2012-06-08 18:02:51

标签: php session session-variables

我尝试访问存储在不同页面上的会话变量。当我启用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 个答案:

答案 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用于存储会话。没有它们,你就无法(安全地)存储会话。