对此的任何帮助都将非常感激。
我有一个简单的网站,允许用户登录和工作人员登录。我使用php include在我的标题中包含init.php。这个文件包含我的session_start();命令和我的数据库连接细节。用户登录后,将显示一个登录按钮,其中包含欢迎消息,具体取决于他们是用户还是工作人员。代码如下,
<div id="logout_button" align="right">
<?php
if ( isset($_SESSION['firstName'])) //if the global variable firstName has a value assigned carry out the following
{
echo "Hello ". $_SESSION['firstName']; // display hello followed by the firstName of customer
?>
<form name="logout" method="post" action="../php/logout.php"> <!-- This button closes the session and clears all variables -->
<input class ="button" type="submit" value="logout">
</form>
<?php
}
else if ( isset($_SESSION['staffId'])) //if the global variable staffId has a value assigned carry out the following
{
echo "Hello staff member ". $_SESSION["staffId"]; // display hello followed by the staffId number
?>
<form name="logout" method="post" action="../php/logout.php"> <!-- This button closes the session and clears all variables -->
<input class ="button" type="submit" value="logout">
</form>
<?php
}
?>
</div>
我遇到的问题是,如果多个用户同时登录,则显示的名称是不可预测的。有时它不是他们的名字,而是其他人也登录。
经过研究,我发现分配给会话的默认名称是PHPSESSID,并且在服务器上创建了一个临时文件夹来保存变量。我假设有多个文件夹使用相同的名称创建,所有文件夹都包含相同的会话变量。我想也许它正在展示它的第一场比赛。
通过更多研究,我发现session_id()随机为每个用户生成一个唯一的会话ID。我添加了代码session_id();直接在我开始会话后,问题仍然存在。
我的最终解决方案是为每个访问者设置唯一的名称和ID。以下代码是我的init.php
<?php
if(session_status !== PHP_SESSION_ACTIVE)
{
$timestamp = date ("Y-m-d H:i:s");
session_name($timestamp);
session_start($timestamp); //Start the session to pass variables
session_id(); #set a random id to separate sessions
}
else
{
//do nothing
}
error_reporting(0); //Stops the users from seeing error messages if connection fails. Stops users seeing your file structure if there is a problem.
require "../includes/dbconnect.php"; // creates the connection to the database
?>
我的想法是创建类似于2015-11-19 18:51:01的会话名称以及随机唯一ID。两个用户在相同的时间登录并被发布相同的随机ID的可能性几乎不可能。我很快发现这会创建一个新会话,并在每次刷新或更改页面时将每个用户记录下来,因为session_start();在IF声明之前没有被调用。因此IF总是被执行。
我的问题是为什么这些会话互相干扰,我该如何阻止它。
关注Peakapot