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();であることを忘れないでください。セッションを使用するすべてのページにある必要があります。これをヘッダーファイルに書き込み、各ページにインクルードすることをお勧めします。

また、セッション変数の名前はuserername、小さなタイプミスです。

于 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 に答える