PHP无法检查Session是否正在运行

时间:2013-02-06 08:20:38

标签: php session login

我尝试在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...

我不知道为什么不起作用(userid始终为-1,登录后也是如此,所以login.php一直显示)

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

session_status() == PHP_SESSION_ACTIVE总是返回false,因为您在测试之前没有执行session_start()。

您始终需要执行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);
?>