繁体   English   中英

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

[英]How to check if a session is expired or never was set in php

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

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

这是我的代码:

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

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

您正在寻找的信息在会话元数据中-但是不会通过API公开。 默认处理程序使用文件-因此,如果文件存在,则存在一个会话。 但您不应尝试绕过处理程序以获取会话元数据! 那将是一个非常糟糕的主意。 确实,听起来您应该编写自己的会话处理程序 ,该处理程序还应公开元数据。

会话已过期

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

如果浏览器认为应该进行会话,则可以从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....";
    ....

...但一定要确保你把东西在会话当用户登录英寸

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

编辑 :您只需要在用户登录后检查session_status()。如果尚未登录,则会话尚未启动,因此$ _SESSION将为false,并且将不会有会话到期通知。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM