使用 AJAX 检查 PHP 会话是不是存在或过期

Posted

技术标签:

【中文标题】使用 AJAX 检查 PHP 会话是不是存在或过期【英文标题】:Check whether a PHP session exists or expired using AJAX使用 AJAX 检查 PHP 会话是否存在或过期 【发布时间】:2011-08-01 18:13:24 【问题描述】:

    如何设置php会话超时,我正在尝试如下,但我认为它不起作用

    ini_set("session.gc_maxlifetime", 600);

    如何使用 ajax (javascript) 查明 php 会话是否存在或过期?

问候

【问题讨论】:

不知道第一个但第二个是不可能的:如果你定期发送 AJAX 请求,你可以让会话保持活跃。 @Shadow - 从技术上讲,如果会话被清除,则重新创建一个新会话。他可以使用 AJAX 来检查特定值 @Cfreak 是的,但如果 AJAX 每分钟发送一次,据我所知,它将使会话永远保持活动状态。 如果 AJAX 脚本的 ping 间隔小于到期限制,则会话不会被清理。但是,会话不会在超时后消失。它是一个概率函数,在过期时间后可以从 0 次命中到无限次命中。 【参考方案1】:

#1 使用session_set_cookie_params()。 600 秒后过期

session_set_cookie_params(600)

(注意与常规的 setcookie 函数不同,session_set_cookie_params 使用您希望它存活的秒数,它不应该是 time() + 600,这是一个常见的错误)

对于 2 号,只需编写一个通过 AJAX 调用的小脚本:

<?php
session_start()

if( empty($_SESSION['active']) ) 
     print "Expired"

else 
     print "Active"


?>

在 Javascript 端(使用 JQuery)

$.get('path/to/session_check.php', function(data) 
     if( data == "Expired" ) 
         alert("Session expired");
      else if (data == "Active" ) 
         alert("Session active");
     
 );

【讨论】:

【参考方案2】:

Shadow Wizard 评论说每次您进行检查时都保持会话处于活动状态。

但解决方案非常简单。诀窍是以大于会话生命周期的时间间隔执行 AJAX 请求。因此,如果您将会话超时设置为 15 分钟,则可以每隔 16 分钟或更长时间通过 AJAX 进行检查。

为了使上述工作正常,会话超时是您应该手动实现的。您可以阅读这篇有用的answer,了解如何设置会话持续时间。

希望这对您或任何正在寻找相同内容的人有所帮助!

【讨论】:

以上是关于使用 AJAX 检查 PHP 会话是不是存在或过期的主要内容,如果未能解决你的问题,请参考以下文章

我如何检查会话是否将在PHP中过期[重复]

ajax 请求是不是会导致更新 asp.net 会话?

Ajax请求会话过期处理(JS)

如何在 django 中查找会话是不是已过期

如何让 PHP 会话在浏览器关闭或一段时间后过期

spring框架发送ajax检查session是不是过期