PHP的会话

时间:2012-04-05 12:47:46

标签: php session

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

我认为这很好,直到我在其他页面(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 个答案:

答案 0 :(得分: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 );
}

我希望这会有所帮助

谢谢

答案 1 :(得分:0)

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

此外,您的会话变量名为userername,small typo

答案 2 :(得分:0)

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

您需要使用session_write_close()

以明确方式关闭会话
....
$_SESSION['userername'] = $username;
session_write_close();
header("Location: home.php");
exit;

答案 3 :(得分:0)

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

<?php
session_start();
error_reporting(E_ALL ^ E_NOTICE);
ini_set( 'display_errors', '0' );