【发布时间】:2023-04-01 10:52:01
【问题描述】:
我有一个文件,其中首先创建了 $_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")
?>
但这根本行不通。我的意思是,如果我自己进入浏览器 cookie 并删除 SESSION cookie,那么是的,整个系统都可以正常工作,除非我登录,否则我无法访问除 login.php 之外的任何其他 php 文件。但我需要这个才能使用logout.php 而不是我自己手动从浏览器中删除会话。
【问题讨论】:
-
我认为
session_destroy()部分将阻止unset部分工作,因为PHP 在请求结束时序列化会话并且到那时它已被销毁。在这种情况下,当您再次启动它时,它将加载包含$_SESSION['username']的先前会话数据 -
也尝试了没有 session_destroy() 的相同代码,它不起作用。它让我疯狂。我在这里犯了什么错误。
-
这里值得一提的是,无论成功与否,您的“login_do.php”都会始终设置 $_SESSION['username']。
-
我更新了 login_do.php 文件。我想这可能是因为我给了你一个你认为的剪辑版。为什么它总是设置会话变量。
标签: php session cookies session-cookies