我先被创建$_SESSION['username']
变量文件:
<?php
$kullaniciadi = $_POST['kullaniciadi'];
$sifre = $_POST['sifre'];
if ((!$kullaniciadi =="") and (!$sifre =="")) {
include("db.php");
$sql = $sqlt->query("select * from uye where kullaniciadi='$kullaniciadi' and sifre='".md5($sifre)."'");
$kayitsayisi = mysqli_num_rows($sql);
if ($kayitsayisi == "0") {
header ("Location: login.php?hata=yes");
}
else {
$kontrol_ok = $sql -> fetch_assoc();
$k=$kontrol_ok["kullaniciadi"];
session_start();
$_SESSION['username']= $k;
header ("Location: homepage.php");
}
}
else {
header ("Location: login.php?hata=yes");
}
?>
它被称为login_do.php
(我从login.php
形式发送MySQL的数据在这里,做此文件中的用户名和密码校验)。
比所有其他PHP文件我也有,我首先:
<?php
session_start();
if (isset($_SESSION["username"])) {
echo 'loginok';
} else {
header ("Location: login.php");
}
?>
比我有一个logout.php
,用户会被重定向到,如果他按下一个按钮。 logout.php
文件包含此:
<?php
session_start();
if(isset($_SESSION['username'])) {
unset($_SESSION['username']);
}
session_destroy();
header("Location: login.php")
?>
但它根本不起作用。我的意思是,如果我自己浏览我的浏览器cookies并删除SESSION cookie,那么整个系统都会正常工作,除非我登录,否则我无法访问除login.php
以外的任何其他php文件。但我需要此操作才能使用注销。而不是我手动从浏览器中删除会话。
我认为'session_destroy()'部分将阻止'unset'部分来自工作,因为PHP序列化的请求结束到那个时候它一直会话销毁。在这种情况下,当你再次启动它时,它将加载之前包含'$ _SESSION ['username']' – apokryfos
的会话数据。同样尝试使用没有session_destroy()的代码,它不起作用。它让我疯狂。我在这里犯了什么错误。 –
值得一提的是,无论成功与否,您的“login_do.php”将始终设置$ _SESSION ['用户名']。 – apokryfos