PHP - 注销脚本不工作。即使变量应为 false 也已登录
PHP - Logout script not working. Logged in even if variable should be false
我的php代码一直保持登录。注销也不起作用。一定有一些我无法发现的错误。
我回应了 $_SESSION['logged] 并且它总是 1。
但是 $_POST['nam'] 确实是空的。所以它不会在打开网站时保留数据。
真实登录的 if 函数也不会解析为真。
很抱歉发布了这么多代码,但也许是 mySQL 部分?
if(isset($_POST['send'])) {
mysqli_connect($servername,$dbuser,$dbpw,$db,$port); //DB-Conn succesfull
$query = "SELECT * FROM `users` WHERE `name` LIKE '$user' AND `pw` LIKE '$pw'";
$result = mysqli_query($con,$query) or die(mysqli_error($connection));
$rows = mysqli_fetch_assoc($result);
if($_POST['name']==$rows['name']) {
$_SESSION['logged'] = true;
echo "Not triggering, still logged in";
}
else { $_SESSION['logged'] = false;}
if(isset($_POST['logout'])) {
$_SESSION = array();
session_destroy();
$_SESSION['logged'] = false;}
echo $_SESSION['logged']; //This is always 1
}
形式
<?php if($_SESSION['logged'] == false) {?>
<form method="post">
<input type="text" class="form-control" id="name" name="name" placeholder="abc">
<input type="password" class="form-control" id="pw" name="pw" placeholder="xyz">
<button type="submit" name="send">Login</button>
</form>
<?php ;}
else {?>
<form method="post">
<button type="submit" id="logout" name="logout">Logout</button>
</form>
<?php }
?>
这是唯一可能的方法,因为 if(isset($_POST['logout'])) {
的计算结果不为真。
该部分未执行。我猜你没有 $_POST['logout']
但 $_GET['logout']
或 在你的 <form>
中 <input name='logout'>
没有值。
设置为true
的变量不可能在下一行false
。
如果您使用的会话在请求期间未锁定,则出现竞争条件的可能性非常小,例如,当您使用 HHVM 而不是 PHP 时,这是默认设置 - 但我怀疑在你的情况下。
如您所见,您将整个脚本包装在 if ($_POST["send"])
语句
中
但是在您的表单中,$_POST["send"]
只会存在于登录表单中,而不存在于注销表单中。
您在此 case.I 中遗漏了一些命令,已更正为 below.Session 在执行 session_destroy.
后不会保存任何内容
<?php
if(!isset($_SESSION))
session_start();
if (isset($_POST['send']))
{
$rows['name']="Done";
if ($_POST['name'] == $rows['name']) {
$_SESSION['logged'] = true;
echo "Not triggering, still logged in <br/>";
} else {
$_SESSION['logged'] = false;
}
}
if (isset($_POST['logout']))
{
$_SESSION = array();
$_SESSION['logged'] = false;
unset($_SESSION['logged']);
session_destroy();
}
echo(isset($_SESSION['logged']) && ($_SESSION['logged']))? 'true' : 'false';
?>
<?php if(!isset($_SESSION['logged']) || !($_SESSION['logged'])) { ?>
<form method="post" action="">
<input type="text" class="form-control" id="name" name="name" placeholder="abc">
<input type="password" class="form-control" id="pw" name="pw" placeholder="xyz">
<button type="submit" name="send">Login</button>
</form>
<?php
} else { ?>
<form method="post" action="">
<button type="submit" id="logout" name="logout">Logout</button>
</form>
<?php }
?>
我的php代码一直保持登录。注销也不起作用。一定有一些我无法发现的错误。
我回应了 $_SESSION['logged] 并且它总是 1。 但是 $_POST['nam'] 确实是空的。所以它不会在打开网站时保留数据。 真实登录的 if 函数也不会解析为真。
很抱歉发布了这么多代码,但也许是 mySQL 部分?
if(isset($_POST['send'])) {
mysqli_connect($servername,$dbuser,$dbpw,$db,$port); //DB-Conn succesfull
$query = "SELECT * FROM `users` WHERE `name` LIKE '$user' AND `pw` LIKE '$pw'";
$result = mysqli_query($con,$query) or die(mysqli_error($connection));
$rows = mysqli_fetch_assoc($result);
if($_POST['name']==$rows['name']) {
$_SESSION['logged'] = true;
echo "Not triggering, still logged in";
}
else { $_SESSION['logged'] = false;}
if(isset($_POST['logout'])) {
$_SESSION = array();
session_destroy();
$_SESSION['logged'] = false;}
echo $_SESSION['logged']; //This is always 1
}
形式
<?php if($_SESSION['logged'] == false) {?>
<form method="post">
<input type="text" class="form-control" id="name" name="name" placeholder="abc">
<input type="password" class="form-control" id="pw" name="pw" placeholder="xyz">
<button type="submit" name="send">Login</button>
</form>
<?php ;}
else {?>
<form method="post">
<button type="submit" id="logout" name="logout">Logout</button>
</form>
<?php }
?>
这是唯一可能的方法,因为 if(isset($_POST['logout'])) {
的计算结果不为真。
该部分未执行。我猜你没有 $_POST['logout']
但 $_GET['logout']
或 在你的 <form>
中 <input name='logout'>
没有值。
设置为true
的变量不可能在下一行false
。
如果您使用的会话在请求期间未锁定,则出现竞争条件的可能性非常小,例如,当您使用 HHVM 而不是 PHP 时,这是默认设置 - 但我怀疑在你的情况下。
如您所见,您将整个脚本包装在 if ($_POST["send"])
语句
但是在您的表单中,$_POST["send"]
只会存在于登录表单中,而不存在于注销表单中。
您在此 case.I 中遗漏了一些命令,已更正为 below.Session 在执行 session_destroy.
后不会保存任何内容<?php
if(!isset($_SESSION))
session_start();
if (isset($_POST['send']))
{
$rows['name']="Done";
if ($_POST['name'] == $rows['name']) {
$_SESSION['logged'] = true;
echo "Not triggering, still logged in <br/>";
} else {
$_SESSION['logged'] = false;
}
}
if (isset($_POST['logout']))
{
$_SESSION = array();
$_SESSION['logged'] = false;
unset($_SESSION['logged']);
session_destroy();
}
echo(isset($_SESSION['logged']) && ($_SESSION['logged']))? 'true' : 'false';
?>
<?php if(!isset($_SESSION['logged']) || !($_SESSION['logged'])) { ?>
<form method="post" action="">
<input type="text" class="form-control" id="name" name="name" placeholder="abc">
<input type="password" class="form-control" id="pw" name="pw" placeholder="xyz">
<button type="submit" name="send">Login</button>
</form>
<?php
} else { ?>
<form method="post" action="">
<button type="submit" id="logout" name="logout">Logout</button>
</form>
<?php }
?>