判断Session的过期时间 采用JavaScript实时显示剩余多少秒

判断Session的过期时间,一般可以采用服务器端的方法或客户端的方法,本文主要介绍采用JavaScript实时显示剩余多少秒的客户端实现方法。

准备工作

在实现过程中,需要获取Session的过期时间和当前时间,所以需要在服务器端将Session的过期时间存入到前端,可以将过期时间存入到一个隐藏域中。

代码示例:

<input type="hidden" id="expire_time" value="<?php echo $expire_time;?>"/>

实时判断Session过期时间

通过JavaScript来实现实时判断Session的过期时间,可以使用定时器setInterval函数每秒钟调用一次判断函数,来更新显示剩余的秒数。

代码示例:

// 获取过期时间
var expire_time = document.getElementById('expire_time').value;
// 定时器每秒执行函数
setInterval(function(){
    // 获取当前时间
    var now_time = Math.round(new Date().getTime()/1000);
    // 计算剩余时间
    var remain_time = parseInt(expire_time - now_time);
    // 如果过期,跳转到登录页
    if(remain_time<=0){
        window.location.href = '/login';
        return false;
    }
    // 显示剩余时间
    document.getElementById('remain_time').innerHTML = remain_time;
},1000);

上面的代码中,通过计算当前时间与过期时间的差值,得到Session的剩余时间,并更新到前端页面的相应元素中,如果Session已经过期,则跳转到登录页面。

示例说明

示例1:

假设过期时间为2022年1月1日23时59分59秒,利用PHP来获得此过期时间戳,然后存入到一个隐藏域的value属性中:

<?php
$expire_time = strtotime('2022-01-01 23:59:59');
?>
<input type="hidden" id="expire_time" value="<?php echo $expire_time;?>"/>

该段代码可以通过PHP的date()函数格式化输出当前时间戳:

<?php
echo date('Y-m-d H:i:s');
?>

示例2:

我们也可以利用session的cookie来实现该功能,具体步骤如下:

  1. 在生成session_id()之前,设置session.cookie_lifetime的值:
<?php
session_set_cookie_params(600); // 10分钟
session_start();
?>
  1. 在前端页面中使用JavaScript定时器服务,连接 HttpOnly session cookie 服务器端获取过期时间,然后计算并显示剩余秒数:
function getCookie(name) {
    var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
    if (arr = document.cookie.match(reg))
        return unescape(arr[2]);
    else
        return null;
}

var lastSeconds = parseInt(60 * getCookie("PHPSESSID_lifetime"));

setInterval(function(){
    if(!lastSeconds){return;}
    lastSeconds--;
    document.getElementById("lastSeconds").innerHTML = lastSeconds;
    if(lastSeconds==0){
        alert("Session过期")
    }
}, 1000);

这样我们就可以通过设置cookie时间来定时更新会话过期时间,然后再通过JavaScript来定时判断,实现实时显示剩余秒数了。

阅读剩余 50%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:判断Session的过期时间 采用JavaScript实时显示剩余多少秒 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • logback自定义json日志输出示例详解

    对于这个话题,我会用标准的 Markdown 格式来回答,并且提供两个具体的示例说明。以下是完整攻略: logback自定义json日志输出示例详解 什么是logback? logback 是一个 Java 日志框架,与 log4j 相比具有更高的性能和更丰富的功能。 为什么需要自定义json日志输出? 在日志分析和处理上,json 格式的日志更加方便和易于…

    Java 2023年5月26日
    00
  • MyBatis执行动态SQL的方法

    MyBatis 是一款开源的持久化框架,支持动态 SQL 的执行,可以方便地编写灵活的 SQL 语句,本文将详细讲解 MyBatis 执行动态 SQL 的方法,包括以下内容: 动态 SQL 的概念与背景 MyBatis 中执行动态 SQL 的方法 MyBatis 中使用动态 SQL 的示例 1. 动态 SQL 的概念与背景 传统的 SQL 语句是静态的,不能…

    Java 2023年5月19日
    00
  • JSP 获取本地图片的实例详解

    想要获取本地图片,可以通过JSP中的文件上传功能实现。下面是具体的步骤: 步骤一、在JSP页面中添加form表单,用来上传图片文件。 <form method="post" enctype="multipart/form-data" action="upload.jsp"> <in…

    Java 2023年6月15日
    00
  • Spring boot创建自定义starter的完整步骤

    Spring Boot创建自定义starter的完整步骤 在Spring Boot中,我们可以创建自定义starter来封装一些常用的功能,以便于在其他项目中重复使用。本文将详细讲解Spring Boot创建自定义starter的完整步骤,并提供两个示例。 1. 创建starter项目 以下是创建starter项目的基本流程: 在IDEA中创建一个Maven…

    Java 2023年5月15日
    00
  • java中aop实现接口访问频率限制

    下面就是“Java中AOP实现接口访问频率限制”的完整攻略,包含以下几个步骤: 1. 添加依赖 首先,在项目中添加以下两个依赖: <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> &l…

    Java 2023年5月20日
    00
  • Struts中action线程安全问题解析

    Struts中action线程安全问题解析 背景 Struts是Java Web应用程序的开发框架之一,它采用了MVC的设计模式,其中Action作为控制器部分的一部分,负责处理用户请求并返回响应。在使用Struts进行Web应用程序开发时,一个常见的问题是:是否需要考虑Action的线程安全性?当有多个用户同时发出请求时,是否会出现线程安全问题? 问题分析…

    Java 2023年5月20日
    00
  • JavaSpringBoot报错“HttpMediaTypeNotSupportedException”的原因和处理方法

    原因 “HttpMediaTypeNotSupportedException” 错误通常是以下原因引起的: 媒体类型不支持:如果您的媒体类型不支持,则可能会出现此错误。在这种情况下,您需要检查您的媒体类型并确保它们受支持。 媒体类型不正确:如果您的媒体类型不正确,则可能会出现此错误。在这种情况下,您需要检查您的媒体类型并确保它们正确。 解决办法 以下是解决 …

    Java 2023年5月4日
    00
  • C#实现异步GET的方法

    针对C#实现异步GET的方法,我们可以参考以下步骤: 第一步:创建HttpClient对象 在C#中实现异步GET请求,我们需要使用HttpClient对象。HttpClient对象是一个可以发送和接收HTTP请求和响应的类,可以在.NET Framework 4.5及更高版本和.NET Core中使用。 我们可以通过以下代码创建一个HttpClient对象…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部