PHP会话互相干扰

时间:2015-11-18 19:08:43

标签: php mysql session

对此的任何帮助都将非常感激。

我有一个简单的网站,允许用户登录和工作人员登录。我使用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

0 个答案:

没有答案