0

私はphpでログインページを書き込もうとしていますが、セッションの問題があります。

内部/ログインページを表示するindex.phpファイルがあります。ソース:

<?php
include ("session_management.php");

if($_SESSION["UserID"] == -1 )
    include("login.php");
else
    include("calendar.php");
?>

私の session_management.php は次のようになります。

<?php

    if(session_status() == PHP_SESSION_ACTIVE) {
        PRINT "session exists<br>";
        //session exists...
    }
    else {
        session_start();
                PRINT "new session<br>";

        $_SESSION["Username"] = 0;
        $_SESSION["UserID"] = -1;
    }
?>

そして最後に、login.php ファイル:

<?php
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        if (isset ($_POST["username"]) && isset ($_POST["pwd"])
                && $_POST["username"] != '' && $_POST["pwd"] != ''){
            $_SESSION["UserID"] = 1;
            $_SESSION["Username"] = "abc";

        }
        else
            PRINT "need name AND pwd";
    }
//.. some code...

なぜそれが機能しないのかわかりません(ユーザーIDは常に-1であり、ログイン後も常に表示されるため、login.phpが常に表示されます)

ご協力いただきありがとうございます!

4

1 に答える 1

0

session_status() == PHP_SESSION_ACTIVEテストの前に session_start() を実行しないため、常に false を返します。

を常に行う必要がありますsession_start()。セッション Cookie が受信されなかった場合は新しいセッションを開始するか、既存のセッションを再開します。

session_management.php を次のように変更します。

<?php
    session_start();
    if ( empty($_SESSION["Username"]) ) $_SESSION["Username"] = 0;
    if ( empty($_SESSION["UserID"]) ) $_SESSION["UserID"] = -1;
?>

そしてそれはうまくいくでしょう。

ある時点で本当にセッションを破棄したい場合 (ログアウト):

<?php
    session_start();
    session_regenerate_id(true);
?>
于 2013-02-06T08:23:00.183 に答える