0

新手问题,但我想知道我是否在这里遗漏了一些基本的东西。

如果我在页面中注册一个会话变量 - 这个变量不是应该可以从同一站点上的另一个页面访问吗?

首先,我在文件 session_var_register.php 中注册一个变量:

<?php
    $_SESSION["myusername"] = 'user';
    if (isset($_SESSION['myusername'])) {
        echo 'Session var myusername is set to '.$_SESSION['myusername'];
    }
?>

当我打开这个页面时,它写道:

Session var myusername is set to user

正如预期的那样。

然后我打开另一个选项卡和另一个页面 check_session_var.php:

<?php
if (isset($_SESSION['myusername'])) {
    echo 'Session var myusername is set to '.$_SESSION['myusername'];
}
?>

此页为空白。

会话变量的意义不是应该在浏览器会话中访问,直到会话以编程方式被破坏或浏览器关闭?

顺便说一句,我正在使用 IE 8 和 Firefox 24。相同的结果。

4

5 回答 5

2

PHP 文档声明您必须调用 session_start() 来启动或恢复 PHP 会话。这必须在您尝试访问或使用会话变量之前完成。在这里阅读更多。

session_start();
于 2013-10-07T12:25:58.610 回答
2

你忘了

session_start() 

最重要的是,在使用之前

$_SESSION

PS:记得在你想使用$_SESSION的每个页面中调用session_start()

于 2013-10-07T12:23:46.773 回答
0

首先在该页面上开始会话

session_start();

你的页面像这样

<?php

session_start();

if (isset($_SESSION['myusername'])) {
    echo 'Session var myusername is set to '.$_SESSION['myusername'];
}
?>
于 2013-10-07T12:25:55.573 回答
0

方法

session_start();

描述

session_start() 基于会话标识符创建会话或恢复当前会话 > 通过 GET 或 POST 请求传递,或通过 cookie 传递。

在您的情况下(以及在大多数情况下)的用法: 将其放在$_SESSION用法之前。

参考: session_start()

于 2013-10-07T12:33:45.177 回答
0

您的会话变量将在同一站点的不同页面上可用,但在每个页面之上,您必须至少具有:

session_start();

它有效,但并非在所有情况下都有效。您还必须在所有页面上使用相同的会话名称(本质上是一个存储会话 ID 的 cookie 名称)。此外,cookie(对于会话工作来说是必不可少的(大部分))可能仅在特定目录中可见。因此,例如,如果您与其他使用会话的人共享同一主机,您不想看到他们的变量,反之亦然,所以您可能想要这样的东西:

1) session_name( 'my_session_id' );
2) session_set_cookie_params( 0, '/my_dir', $_SERVER['HTTP_HOST'], false, true );
3) session_start();

您可能还希望在其他服务器上查看您的会话变量,在这种情况下自定义会话处理程序可能很有用。花一两天时间来实现自己 - 了解会话如何工作的好方法,因此我建议。

于 2013-10-07T12:31:53.053 回答