使用会话变量在不同页面上使用信息

时间:2014-02-22 11:08:07

标签: php session

我有一点问题。我正在尝试设置一个只有三个.php页面的简单网页。我希望在用户登录时设置会话变量$ _SESSION ['userID'],并且我希望索引页面在有人登录时显示额外信息。

在index.php上我想显示一些信息,如果用户已登录我想显示一些额外的信息。 login.php - 简单的登录表单。 login_exe.php - 负责数据库连接和验证。

所以这就是我的想法:

在index.php上,检查会话是否已启动,如果不是:start。

<?php

if (!isset($_SESSION)) {
  session_start();
  echo "session started";
}

稍后,检查$ _SESSION ['userID']是否包含值,如果是,则:打印字符串

if($_SESSION['userID'] != null){
   echo "User logged in";
}

在login_exe.php上,我的代码几乎相同:

<?php

if (!isset($_SESSION)) {
  session_start();
    echo "session started";
}
验证功能

$_SESSION['userID'] = $data['userID'];
header("Location: index.php");

问题是每个页面都会启动一个新会话。我该如何解决这个问题并且只启动一次会话?提前致谢

3 个答案:

答案 0 :(得分:1)

您应该将session_start()放在使用会话的文档之上。比方说,如果您有5个使用会话的.php文件,那么将session_start()放在其上5倍。

这是因为session_start()发送标头和标头必须在任何输出之前发送(例如,任何 echo 空白)。

然后,您应该使用类似isset($_SESSION["foo"])的内容,而不仅仅是整个 $ _ SESSION 数组,其中foo是您之前设置的内容。

如果您根本不想要会话或需要重置整个阵列,只需调用session_destroy()即可有效破坏当前会话。当你想摆脱一把钥匙时,请使用unset($_SESSION["foo"])

最后,您可能会遇到奇怪的案例,您无法读取您所写的会话密钥。在这些情况下,检查会话的路径是什么,以及它们是否可写,或者改变它们的路径:

$path = session_save_path();        // what is the path

is_writable($path);                 // can i write to it?

session_save_path("my/new/path");   // change the darn path; 
                                    // put -even- before session_start()!

:) 很高兴我帮忙

答案 1 :(得分:0)

我认为PHP手册与...相比真的很好啊,所以请阅读session_start()。它说:

  

session_start()创建会话或恢复当前会话(...)

所以你需要的只是代码中的session_start()。这必须在每个请求上执行(可能包括在内)。

检查userId的代码看起来很好,这里有一个重要的提示:你应该确切知道PHP中的isset(),empty()等是什么意思,所以总是有comparision of comparison

答案 2 :(得分:0)

您不应在评论中提出新答案(编辑:问题)。在这里和编码一样系统化。

如何结束会话:

这为讨论提供了空间,因为会话cookie是客户端,会话数据是服务器端。

我建议:

$_SESSION = null;

原因:这将立即清除所有登录和其他相关数据。它使cookie完好无损,这通常无关紧要,因为所有相关数据都已消失。