【发布时间】:2014-03-24 02:06:24
【问题描述】:
我有点问题。我正在尝试建立一个只有三个 .php 页面的简单网页。我希望在用户登录时设置会话变量 $_SESSION['userID'],并且我希望索引页面在有人登录时显示额外信息。
在 index.php 上我想显示一些信息,如果用户登录我想显示一些额外的信息。 login.php - 简单的登录表单。 login_exe.php - 负责数据库连接和验证。
这就是我的想法:
在 index.php 上,检查会话是否启动,如果没有:启动。
<?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");
问题是每个页面都会启动一个新会话。我该如何解决这个问题并且只开始一次会话?提前致谢
【问题讨论】:
-
首先,将
session_start();呼叫放在首位。总是。 -
session_start()应始终位于文档顶部。而不是检查整个$_SESSION检查$_SESSION['key']。 -
我应该删除 "if (!isset($_SESSION)) {" 子句并只使用 session_start() 吗?我需要在 index 和 login_exe.php 上都有 session_start() 吗? @vlzvl
-
您应该将
session_start();放在使用会话的文档之上。如果您有 5 个使用会话的 .php 文件,则将 5 倍的session_start()放在它们上面。这是因为session_start()发送headers。然后,您应该使用isset($_SESSION["foo"])之类的东西,而不仅仅是整个$_SESSION数组,其中foo是您之前设置的东西。 -
@vlzvl 你应该把它作为答案,这对我帮助很大!