使用 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 会话是不是存在或过期的主要内容,如果未能解决你的问题,请参考以下文章