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总是返回 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);
?>
于 2013-02-06T08:23:00.183 回答