0

私はこのスクリプトを書きました。動作していますが、ページを離れたり、ページに戻ったりすると、セッションが保存されません。私が間違っていることは何ですか?

login.php

<?php
session_start();
require 'classes.php';

//if user is not yet authorized
if ($_SESSION['user']->iduser == null) {
    $dbhandle = mysql_connect($hst, $usr, $pass);
    if (!$dbhandle) {
        die('Could not connect: ' . mysql_error());
    }
    $selected = mysql_select_db($dbName, $dbhandle)
            or die("Could not select the database");

    $result = mysql_query(" query ");
    $resultArray = mysql_fetch_array($result);
    $num_rows = mysql_num_rows($result); //count how many rows returned
    //if 0 rows returned, then login was failed
    if ($num_rows == 0) {
        die('Error! Access denied. Incorrect username or password.');
    } else { //if username and password match
        $_SESSION['user'] = new user();
        $_SESSION['user']->iduser = $resultArray{'iduser'};
        $_SESSION['user']->fname = $resultArray{'fname'};
        echo 'Dear ' . $_SESSION['user']->fname . ', you succesfully logged in!';
    }
    //if user is already logged in
} else {
    echo 'You already logged in!<br>Your email is: ';
}
?>

クラスユーザー

<?php
class user {
    public $iduser = null;
    public $fname = null;
    public $lname = null;
    public $email = null;
    public $password = null;
    public $permission = null;
}
?>
4

1 に答える 1

3

セッションを開始する前に「require (classes.php)」する必要があります。

(簡単な答え:))

理由: session_start を呼び出すと、セッションがデコードされます。オブジェクトが正しくシリアライズ解除されるためには、クラスがすでに定義されている必要があります。したがって、session_start の前にクラスを定義する必要があります。これらの 2 行を入れ替えることで実行できます。

http://php.net/manual/en/oop4.serialization.php

于 2012-09-13T02:36:48.367 に答える