如何检查会话是否过期或从未在php中设置

时间:2019-01-07 15:38:41

标签: php session echo

如何检查会话是否已设置或已设置但已过期?

我正在使用此代码,如果会话已过期,我想发出回声:Session has expired. Please login again

这是我的代码:

session_start();
if(!isset($_SESSION['sfmlogin'])){
?>
<a href="login.php">Login again</a>
<?php
exit();
}

因此对于首次访问该页面的用户,他们应该不会收到像session expired这样的回声,因为他们从未登录过。

2 个答案:

答案 0 :(得分:2)

您要查找的信息在会话元数据中-但这不会通过API公开。默认处理程序使用文件-因此,如果文件存在,则存在一个会话。但您不应尝试绕过处理程序以获取会话元数据!那将是一个非常糟糕的主意。确实,您听起来应该writing your own session handler,它也可以显示元数据。

  

会话已过期

这是一个非常复杂的命题:使用默认处理程序(除了绕过处理程序以获取元数据的问题),没有会话到期-只有会话数据的垃圾收集没有被触及一段时间。在某些系统上,这是通过批处理来处理的。在某些情况下,这是一个随机事件。因此,实际上,在这种情况下,从服务器的角度来看,过期的会话与没有会话之间没有区别。

如果浏览器认为它应该进行会话,则可以从cookie推断:

session_start();
if ($_COOKIE(session_name() && !count($_SESSION)) {
    print "session has expired";
    exit;
} elsif (!$_COOKIE(session_name()) {
    print "You need to login first";
    exit;
} else {
    print "welcome back....";
    ....

...但是请确保在用户登录时在会话中放入某物

答案 1 :(得分:0)

如何对session_status()进行布尔检查?如果返回true,则该会话处于活动状态,否则,将返回“会话已过期”通知。 http://php.net/manual/en/function.session-status.php

编辑:您只需要在用户登录后检查session_status()。如果尚未登录,则说明会话尚未启动,因此$ _SESSION已经为false,并且会话过期通知将无法执行。