我正在制作一个网页,我正在尝试制作它,使页面在您未登录时显示登录字段,并在您登录时显示注销按钮。登录和注销本身工作正常,因为我首先在单独的网页上使用它们,但是现在,在同一个页面上,一旦你登录,你就不能再注销了,我也不知道为什么,我以为这可能与$_POST有关,但经过一些测试后,似乎与它无关。
在同一网页上显示的代码:
function DisplayLogin(){
if (isLoggedIn()){
DisplayLoggedIn();
} else {
DisplayLoginForm();
}
}
function DisplayLoginForm(){
echo "<div>";
include_once 'Login.php';
echo "</div>";
}
function DisplayLoggedIn(){
echo "<div>";
include_once 'Logout.php';
echo "</div>";
}用于登录的代码:
<?PHP
function Login($UserName, $Password){
if (isPasswordCorrect($UserName, $Password)) {
sec_session_start();
$_SESSION['LoggedIn'] = true;
$_SESSION['UserName'] = $UserName;
$_SESSION['UserID'] = getUserID($UserName);
$headerstring = determineHeader();
$_SESSION['TimeStamp'] = time();
header($headerstring);
unset($_SESSION['LoginURL']);
} else {
echo 'Username or Password incorrect';
}
}
if (isset($_POST["Login"])) {
Login($_POST['UserName'], $_POST['Password']);
}
?>
<form method="POST">
<input type="text" name="UserName">
<input type="password" name="Password">
<input type="submit" name="Login" value="Log In">
</form>注销代码:
<?PHP
if (isset($_POST['logout'])) {
session_unset();
session_destroy();
//header("Refresh:0");
}
?>
<form method="post">
<input type="submit" name="logout" value="Logout">
</form>注意:代码语法不是完全正确的,因为我删除了一些不重要的东西。
编辑:我很确定在按下注销按钮后,页面会让用户重新登录,但我不知道为什么,也不知道如何登录。
编辑: isLoggedIn代码:
function isLoggedIn(){
if (session_status() == PHP_SESSION_NONE) {
sec_session_start();
}
if (isset($_SESSION['LoggedIn']) && $_SESSION['LoggedIn']) {
return true;
} else {
return false;
}
}编辑:密码代码:
function isPasswordCorrect($UserName, $Password){
$mysqli = connectToDatabase();
$stmt = $mysqli->prepare("SELECT UserPassword, UserID FROM users WHERE UserName=?");
$stmt->bindParam("1", $UserName);
$stmt->execute();
$row = $stmt->fetch();
return (password_verify($Password, $row['UserPassword']));
}编辑:将"exit;“放在DisplayLogin()函数的if和else部分的和处可以解决这个问题,但这不是一个可接受的解决方案,因为这会阻止页面加载的其余部分。
发布于 2015-07-06 23:26:33
if (isset($_POST['logout'])) {
sec_session_start();
session_unset();
session_destroy();
//header("Refresh:0");
}您错过了在取消设置安全会话之前启动它。
发布于 2015-07-06 23:34:34
<?PHP
if (isset($_POST['logout'])) {
unset($_SESSION['LoggedIn']);
unset($_SESSION['UserName']);
unset($_SESSION['UserID']);
unset($_SESSION['TimeStamp']);
session_unset();
session_destroy();
//header("Refresh:0");
}
?>尝试取消设置所有会话。
发布于 2015-07-07 00:06:41
我解决了,但我不知道为什么它以前不起作用。在我调用displayLogin()的页面中,我在它之后调用了isLoggedIn(),出于某种原因,这会让会话保持注销前的状态,但是通过将isLoggedIn()的结果存储在一个变量中,并在调用displayLogin()之前使用该变量,一切都会正常工作。
我只是不知道为什么它以前不能工作,有人能给我解释一下吗?
https://stackoverflow.com/questions/31249492
复制相似问题