我尝试在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一直显示)
感谢您的帮助!
答案 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);
?>