我如何在php中添加一个条件来检测会话已经结束


how can I add a condition in php to detect that a session has ended?

我在php中创建了一个页面来登录用户。但是,一旦我退出登录,如果我在浏览器中输入一个受限制的页面,我就能看到它,即使我已经退出登录。

我在页面的开头有这个代码,有什么想法吗?:)谢谢

<?php 
if(!isset($_SESSION)){
    session_start();
}

?>

希望注销时正在呼叫session_destroy();

同样,你不需要

<?php 
if(!isset($_SESSION)){
    session_start();
}
?>

在每一页。这应该只是在登录页面。对于其他页面,它应该是:

<?php 
if(!isset($_SESSION)){
    //Redirect to login Page
} else {
    //User is logged in. Display relevant content. 
}
?>

在需要使用会话时始终使用session_start

Before session_start no SESSION exists

cookie是控制用户是否登录的好方法。一种简单但不安全的方法是在成功登录时简单地编写一个"loggedin"cookie,并在注销时删除它。

更复杂的cookie登录/注销逻辑可以存储一个大的随机字符串,在登录时在数据库中进行跟踪。注销时,数据库删除cookie值所使用的随机字符串,同时cookie也被删除。这样,即使有人窃取了cookie并试图重新使用它,在生成页面时,它也会检查该随机字符串的状态,并拒绝访问该页面。

发生这种情况是因为您没有销毁会话。
要做到这一点,您必须创建一个链接到一个页面,点击"注销"将导致该页面,您必须调用session_destroy()。例如:<a href="path_to_your_page.php">Logout</a>在你的页面中,你运行这个:

 <?php
session_start();
session_destroy();
header("location:index.php");
?>