【问题标题】:php session variables without cookies没有cookies的php会话变量
【发布时间】:2012-06-12 19:22:31
【问题描述】:

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

【问题讨论】:

    标签: php session session-variables


    【解决方案1】:

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

    【讨论】:

    • session_start();之前添加了ini_set("session.use_only_cookies", "0");现在它可以工作了。谢谢。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      php_flag session.use_cookies 0
      

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

        • 使用 cookie 作为会话 ID 本身并不比仅在 URL 中传递会话 ID 更安全。我反对您帖子中的“安全”。
        • 您可能是对的,使用 cookie 更安全一些。就我而言,我只是使用会话让超链接在几分钟后过期。我认为在这种情况下没有安全问题。
        猜你喜欢
        • 2012-05-25
        • 2012-07-13
        • 2014-05-26
        • 1970-01-01
        • 1970-01-01
        • 2012-07-07
        • 1970-01-01
        • 2012-08-03
        • 2013-05-01
        相关资源
        最近更新 更多