我正在开发带有会话的系统,其中我在成功登录后将代码放入启动会话并将值分配给会话变量,例如$_SESSION['email']
. 另外,我已经放了一个会话销毁代码,但会话似乎没有销毁。我有以下文件 - index.php该文件使用以下代码授予用户访问正确凭据的权限:
if(password_verify($password,$dbpass)){
$stmt = $conn->prepare("SELECT name, image FROM admins WHERE email=?");
$stmt->bind_param("s",$email);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($name,$image);
$stmt->fetch();
$_SESSION['name'] = $name;
$_SESSION['email'] = $email;
$_SESSION['image'] = $image;
header("Location:insert.php");
}
通过设置会话变量并重定向到预期文件,它可以正常工作。在文件中insert.php
,我导入了session.php
具有以下代码的文件:
session_start();
if(!isset($_SESSION['email'])){
header("Location:index.php");
}
另外,我有一个 logout.php 文件,其中包含以下代码:
if(isset($_SESSION['email'])){
session_destroy();
}
header("Location: index.php");
运行后logout.php
,如果我再次尝试访问文件insert.php
,它会打开,但会话文件已导入其中。它应该被重定向到index.php
文件。出了什么问题?任何人请帮忙。
您的会话和您的 $_SESSION 服务器变量是分开的。会话将中断,但变量不会为空。
试试这个:
session_start();
session_destroy();
//Now you can choose whether you want to unset all sessions, or specific one(s):
$unset_sessions = ['email'];
foreach($_SESSION as $session => $session_value) {
if (in_array($session, $unset_sessions))
unset($_SESSION[$session]);
}
//Or all of them:
$_SESSION = [];
认为还可以从中创建一个函数会很有趣:
function breakSessions($specifics= []) {
if (!empty($specific)) { //Handle specifics
foreach($_SESSION as $session => $session_value) {
if (in_array($session, $specifics))
unset($_SESSION[$session]);
}
} else {
$_SESSION = [];
}
}
breakSessions(['login', 'remember_me']) //Specifics;
breakSessions(); //All of them```
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句