PHP Session无法在服务器上运行

问题描述 投票:1回答:2

我正在使用PHP和会话创建一个超级简单的票证跟踪系统,我遇到了一些麻烦,我有以下几页:

  • admin.php(您可以在其中创建,编辑和删除票证的页面)
  • login.php(您登录的页面)
  • logout.php(不是页面,只是注销代码)
  • edit.php
  • add.php
  • delete.php

如果没有设置会话,当你转到admin.php时,它会转到login.php。

在login.php中,如果设置了会话,则会将您带到admin.php。

用户名和密码以明文形式存储在login.php文件中,因为安全性不是这里的主要问题,它只是一个用户名和密码。

这是admin.php中的代码

<?php
    include "includes/header.php";
    include "includes/config.php";
    include "includes/db.php";

    session_start();
    $admin = isset($_SESSION['myAdmin']) ? $_SESSION['myAdmin'] : false;

    if(!$admin){
        header('Location: login.php');
    }

    $db = connect();

    $stmt = $db->query('SELECT * FROM tickets');
    $stmt->execute();

    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>

这是login.php中的代码

<?php
    include "includes/header.php";

    session_start();
    $admin = isset($_SESSION['myAdmin']) ? $_SESSION['myAdmin'] : false;

    if(isset($_SESSION['myAdmin'])){
        header('Location: admin.php');
    }

    $user = 'myUsername';
    $pass = 'myPassword';

    $username = isset($_POST['username']) ? $_POST['username'] : false;
    $password = isset($_POST['password']) ? $_POST['password'] : false;

    if($username && $password){
        if($user == $username && $pass == $password){
            $_SESSION['myAdmin'] = true;
            header('Location: admin.php');
        }
    }
?>

它在localhost上运行奇迹,但我不能让它在我的服务器上工作。两者都运行PHP 7.0并且所有数据库配置都很好。

这是发生的事情:

当我登录并输入正确的用户名和密码时,它只需重新加载login.php,现在如果我转到admin.php它会显示管理页面,就好像会话已创建一样。

即使我删除所有浏览数据或以隐身模式尝试也是如此。它仍然是一样的。有什么我没看到的吗?提前致谢。

顺便说一下,这是注销码:

<?php
    session_start();
    unset($_SESSION['myAdmin']);
    header('Location: login.php');
?>

当我打开admin.php时,我可以看到注销链接,当我点击它时,我会登录login.php,但如果我在浏览器中输入它,我仍然可以访问admin.php。

什么让我失望的是我不知道如何调试,因为当变量为null或undefined或false / true时,echo不会显示任何内容。

编辑:好的,所以,在每个header线后,我添加了这个exit();,页面在登录后显示为空白或默认情况下在管理员中显示。现在我可以清楚地看到问题。

标头(重定向)不起作用。使用ini_set时('display_errors','On');错误说:

警告:无法修改标头信息 - 已经发送的标头,它使用header指向该行。我怀疑session_start()可能与它有关。

php html session login
2个回答
1
投票

session_start()和header('Location:login.php')应该在header.php之前

    session_start();

    if(!$_SESSION['myAdmin']){
        header('Location: login.php');
    }

    include "includes/header.php";

无论何时调用header(),都必须在页面上的任何其他输出之前调用它。否则您将收到以下错误:

警告:无法修改标头信息 - 已发送的标头


0
投票

而不是使用PHP重定向,请尝试:

`<?php echo '<script>window.location.replace("url")</script>'?>`
© www.soinside.com 2019 - 2024. All rights reserved.