没有cookie的php会话变量

没有cookie的php会话变量,php,session,session-variables,Php,Session,Session Variables,我尝试访问存储在不同页面上的会话变量。当我启用cookies时,它可以工作,但是当我禁用cookies时,会话变量就消失了 下面是一个例子: <?php //page1.php session_start(); $_SESSION['startTime'] = time(); echo("<a href=\"page2.php?" . session_name() . "=" . session_id() . "\">Page2</a><br />

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

下面是一个例子:

<?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的会话变量?

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

您将需要更改php.ini设置
会话。使用\u only\u cookies
0
以允许在查询字符串中传递会话id。您可能还希望使用神奇常量
SID
,而不是
session\u name()。"=" . 会话id()

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

php_flag session.use_cookies 0

会话ID存储在cookie中。否则服务器怎么知道它是同一个浏览器在和它说话呢

(这是一个有点诡计的问题,因为您可以在URL中保存会话ID,但这不是一个好主意)


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

将cookie用于会话ID并不比在URL中传递会话ID更安全。我反对你帖子中的“安全”。你可能是对的,使用cookies更安全一些。在我的例子中,我只是使用会话让超链接在几分钟后过期。我认为在这种情况下没有安全问题。添加了
ini_集(“session.use_only_cookies”,“0”)就在
会话_start()之前现在它可以工作了。非常感谢。