无法让SESSION工作

时间:2013-08-30 00:03:39

标签: php html session login

这是故事。我在PHP中编写(相当)简单的登录,没有数据库。是的,我同意,这是不安全和肮脏的方式,但我只是在学习。无论如何,代码很简单,除会话外一切正常。我试图让攻击者停止访问panel.php,这是受管理员可以进入的受保护页面。 index.php是带有表单的登录页面。

的config.php

<?php
$loginToken =   '123456';

$uname      =   'test';
$upass      =   '123123';


$a_login        =   'index.php';
$a_panel        =   'panel.php';
$a_list     =   'list.php';
$a_add      =   'add.php';
$a_other        =   'other.php';
?>

index.php (登录表单 - 出于某种原因,SO不允许我正确粘贴代码):

<?php
// Load & start a session before everything
session_start();

// If session is already loaded, get into panel area
if ($_SESSION['login'] == "1") {
        Header("Location: $a_panel");
}

// Load configuration file
include_once('cfg/config.php');

if (isset ( $_POST ['username'] )) {
        $password = $_POST ['password'];
        $username = $_POST ['username'];

        if ($password == $upass && $username == $uname) {
                header ( "Location: $a_panel" );
                exit (); }
}
?><html>
<head>
        <title>Test</title>
        <link rel="stylesheet" href="css/login.css" media="all" />
</head>
<body>

<br /><br />
<center><a href="index.php"><img src="images/logo_b.png" /></a></center>
<br /><br />

<?php
        if (isset($_GET['nToken']))     // A little bit of security (index.php?nToken=123456)
        {
                if ($_GET['nToken'] == $loginToken) { ?>
                <form id="login" action="" method="post">
                  <fieldset id="inputs">
                      <input name='username' id="username" type="text" placeholder="Username" autofocus required>  
                      <input name='password' id="password" type="password" placeholder="Password" required>
                  </fieldset>
                  <fieldset id="actions">
                      <input type="submit" id="submit" value="Log in">
                  </fieldset>
                </form>
<?php
        }
        }
echo '
</body>
</html>';
?>

panel.php (管理员区域)

<?php
session_start();
    // Insert a config file
    require_once('cfg/config.php');

    // Check if logged (and if loaded display buttons)
    if ($_SESSION['login'] == "1") {
?>

<head>
    <title>
        Admin panel @ TEST
    </title>
    <link rel="stylesheet" href="css/bg.css" media="all" />
    <center><img src="images/header_1.png" /></center>

<div class="hot-container">
    <p>
        <a href="#" class="btn btn-blue">Listing</a>
        <a href="#" class="btn btn-blue">Add new</a>
        <a href="#" class="btn btn-blue">Settings</a>
    </p>
    <p>
    </p>
</div>

<?php
}
?>

据我所知,代码应该正常工作,因为session_start()被发布到需要的地方(config.php除外),但会话未注册。当我使用我输入表单的信息(从配置文件)访问panel.php时,我得到一个空白页面,因此,这不是一切。即使我通过在URL中输入“/panel.php”来访问该页面,我也会得到空白页。

现在我很好奇它只是我和我的知识水平还是我必须在php.ini中做一些修正:)请注意我之前尝试从SO获得尽可能多的信息无论如何都不起作用。

谢谢!

0 个答案:

没有答案