0

我有以下问题,会话不保留信息。所以可能我犯了很多错误,但我不知道为什么,如果你看到任何其他无用/缺失的东西,请你说出来。这是一个登录脚本。

我认为这很好,直到我在另一个页面(home.php)中看到它找不到会话 ID。

我是 PHP 新手,但如果有人能提供帮助会很好:) 这是代码,

    <?php
    error_reporting(E_ALL ^ E_NOTICE);
    ini_set( 'display_errors', '0' );
    session_start();
    include ('db_connect.php');
    include("error.php");

    if($_SERVER['REQUEST_METHOD'] == "POST")
    {
        //formulier verstuurd
        $username = $_POST['username'];
        $password = $_POST['password'];

        //protect MySQL Injection
        $username = mysql_real_escape_string($username);
        $password = mysql_real_escape_string($password);

        $query = mysql_query("SELECT * FROM inlog WHERE username = '$username' AND password = '$password' ") or die(mysql_error());
        $rows = mysql_num_rows($query);

        if($rows == 1) {
        $_SESSION['userername'] = $username;
        header("location:home.php");
        }       
        else
        {
            $wronguser = "<div id='wronguser'>*Verkeerd gebruikersnaam of wachtwoord</div>";        
            }           
        }

        ?>

//dbconnect.php

    <?php
    $connect = mysql_connect( 'localhost', 'root', 'root' );
    mysql_select_db('applicatie', $connect);
    ?>

//error.php

    <?php
    ini_set('display_errors',1); 
     error_reporting(E_ALL);
    ?>

更新。我无法再登录,因为会话不再正确:/

4

4 回答 4

1

尝试这个

error_reporting ( E_ALL ^ E_NOTICE );
ini_set ( 'display_errors', '0' );
session_start ();
include ('db_connect.php');
include ("error.php");

/**
 * Check Login
 */
if (isset ( $_POST ['username'] ) && isset ( $_POST ['password'] )) {

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

    // protect MySQL Injection
    $username = mysql_real_escape_string ( $username );
    $password = mysql_real_escape_string ( $password );

    $query = mysql_query ( "SELECT * FROM inlog WHERE username = '$username' AND password = '$password' " ) or die ( mysql_error () );
    $rows = mysql_num_rows ( $query );

    if ($rows == 1) {
        $_SESSION ['userername'] = $username;
        $_SESSION ['auth'] = true;
        header ( "location:home.php" );
    }
    else
    {
        $_SESSION ['userername'] = false;
        $_SESSION ['auth'] = false;
    }
}

/**
 * Logout
 */

if (@$_GET ['cmd'] == "logout") {
    $_SESSION = array ();
}

/**
 * Error Output
 */

if (! $_SESSION ['auth'] || ! $_SESSION ['userername']) {
    $wronguser = "<div id='wronguser'>*Verkeerd gebruikersnaam of wachtwoord</div>";
    die ( $wronguser );
}

我希望这有帮助

谢谢

于 2012-04-05T13:08:59.097 回答
0

请记住 session_start(); 需要在使用会话的所有页面上。最好将其写入头文件并包含在每一页中。

您的会话变量也被命名为用户名,小错字

于 2012-04-05T12:50:23.280 回答
0

如果您使用重定向脚本,PHP 将无法编写会话header("Location...")。据我所知,这也仅在您重定向到同一服务器上的脚本时才会发生(有人可以确认吗?)。

您需要使用以下命令显式关闭会话session_write_close()

....
$_SESSION['userername'] = $username;
session_write_close();
header("Location: home.php");
exit;
于 2012-04-05T12:52:43.823 回答
0

尝试将 session_start() 放在第一行,如下所示

<?php
session_start();
error_reporting(E_ALL ^ E_NOTICE);
ini_set( 'display_errors', '0' );
于 2012-04-05T13:12:50.197 回答