PHP-会话一半在选项卡关闭并重新打开时登录

PHP-会话一半在选项卡关闭并重新打开时登录,php,session,Php,Session,在我的网站上,我有一个导航栏,它根据用户是否登录而变化(如果%_会话[“用户名”]存在,则会添加一个注销按钮)。这很好,在用户登录时会出现(当用户登录时,他们会被重新定向到索引页,该页上有注销按钮)。如果我打开另一个选项卡,我刚到家就登录了。当我按下登录按钮时,注销按钮突然出现。如何获得它以使“注销”按钮出现,就像用户在打开另一个选项卡或关闭/打开选项卡时登录一样 我通过回显$u会话[“username”]进行了测试。当登录时,当打开一个新的选项卡时,由于此变量不存在,因此会出现此错误。一旦我按

在我的网站上,我有一个导航栏,它根据用户是否登录而变化(如果%_会话[“用户名”]存在,则会添加一个注销按钮)。这很好,在用户登录时会出现(当用户登录时,他们会被重新定向到索引页,该页上有注销按钮)。如果我打开另一个选项卡,我刚到家就登录了。当我按下登录按钮时,注销按钮突然出现。如何获得它以使“注销”按钮出现,就像用户在打开另一个选项卡或关闭/打开选项卡时登录一样

我通过回显$u会话[“username”]进行了测试。当登录时,当打开一个新的选项卡时,由于此变量不存在,因此会出现此错误。一旦我按下登录按钮,用户就会立即登录,然后它会回显用户名

由于会话已被破坏,当浏览器完全关闭时不会发生这种情况,但当打开此网站的多个选项卡时,此错误会令人讨厌,并且在用户登录时不会显示用户正在登录

我该如何解决这个问题

代码:

索引:

    session_start();
include("dbseinfo.php"); //Has info for connection to dbse
    echo '<div id="hmenu">';
    echo '<ul>'; 
    echo '<li><a href="index.php">Home</a></li>';

if(isset($_SESSION["username"])){

echo '<li><a href="http://www.reddax.co.uk/logout.php">Logout</a></li>';

    $username=$_SESSION["username"];
登录进程

session_start();
if(isset($_SESSION["username"])){
    header( "Location: index.php" );
}
include("dbse.inc.php");

$username=$_POST["username"];
$password=$_POST["password"];

   (Query to call username from databse)

if($row = $stmt->fetch(PDO::FETCH_OBJ))
{
if(password & username is correct)
{
    $_SESSION["username"]=$username;
    header('Refresh: 2; URL=index.php');

您应该提供一些代码,理想情况下是一个可以复制这种行为的简明示例。这种情况会发生在不同的浏览器上吗?这有点困难,因为我的数据库中绑定了登录系统。它确实出现在不同的浏览器中——Chrome、firefox、edge。好吧,从我的角度来看,你没有给用户分配相同的会话。您是否确保在不同选项卡上具有相同的会话ID?添加了代码。我有很多包含私有数据的include文件,所以我试着把核心代码放在一起。希望这有帮助?给出错误的
回声在哪里?您是否忘记在该页面上调用
session\u start()
?您应该提供一些代码,最好是一个可以重现这种行为的简明示例。这种情况会发生在不同的浏览器上吗?这有点困难,因为我的数据库中绑定了登录系统。它确实出现在不同的浏览器中——Chrome、firefox、edge。好吧,从我的角度来看,你没有给用户分配相同的会话。您是否确保在不同选项卡上具有相同的会话ID?添加了代码。我有很多包含私有数据的include文件,所以我试着把核心代码放在一起。希望这有帮助?给出错误的
回声在哪里?您是否忘记在该页面上调用
会话\u start()
session_start();
if(isset($_SESSION["username"])){
    header( "Location: index.php" );
}
include("dbse.inc.php");

$username=$_POST["username"];
$password=$_POST["password"];

   (Query to call username from databse)

if($row = $stmt->fetch(PDO::FETCH_OBJ))
{
if(password & username is correct)
{
    $_SESSION["username"]=$username;
    header('Refresh: 2; URL=index.php');