问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

session怎么设置过期时间

发布网友 发布时间:2022-04-24 04:57

我来回答

2个回答

懂视网 时间:2022-04-06 03:26

php设置过期时间的session方法:首先使用memcache或Redis来保存session,设置过期时间;然后创建一个session类,在session写入时,把过期时间也写入;最后读取时,根据过期时间判断是否已过期即可。

php设置过期时间的session方法:

一、php session 有效期

PHP的session有效期默认是1440秒(24分钟),如果客户端超过24分钟没有刷新,当前session会被回收,失效。

当用户关闭浏览器,会话结束,session也会失效。

可以修改php.ini的session.gc_maxlifetime来设置session的生命周期,但并不能保证在超过这一时间后session信息立即会删除。因为GC是按机率启动的,可能在某一个长时间内都没有被启动。那么大量的session在超过session.gc_maxlifetime后仍然有效。

二、.session.gc_maxlifetime,session.gc_probability,session.gc_divisor说明

session.gc_maxlifetime = 30 表示当session文件在30秒后没有被访问,则视为过期session,等待GC回收。

GC进程调用的概率是通过session.gc_probability/session.gc_divisor计算得来的,而session.gc_divisor默认是1000,

如果session.gc_probability = 1000,那么GC进程在每次执行session_start()时都会调用,执行回收。

把session.gc_probability/session.gc_divisor的机率提高,会有帮助,但会对性能造成严重影响。

三、严格控制session过期方法

1、使用memcache/Redis来保存session,设置过期时间,因为memcache/redis的回收机制不是按机率的,可以确保session过期后失效。

2、只使用php实现,创建一个session类,在session写入时,把过期时间也写入。读取时,根据过期时间判断是否已过期。

<?php
/**
 * Session控制类
 */
class Session{
 /**
 * 设置session
 * @param String $name session name
 * @param Mixed $data session data
 * @param Int $expire 超时时间(秒)
 */
 public static function set($name, $data, $expire=600){
 $session_data = array();
 $session_data['data'] = $data;
 $session_data['expire'] = time()+$expire;
 $_SESSION[$name] = $session_data;
 }
 /**
 * 读取session
 * @param String $name session name
 * @return Mixed
 */
 public static function get($name){
 if(isset($_SESSION[$name])){
 if($_SESSION[$name]['expire']>time()){
 return $_SESSION[$name]['data'];
 }else{
 self::clear($name);
 }
 }
 return false;
 }
 /**
 * 清除session
 * @param String $name session name
 */
 private static function clear($name){
 unset($_SESSION[$name]);
 }
}
?>

demo:

<?php
session_start();
$data = '123456';
session::set('test', $data, 10);
echo session::get('test'); // 未过期,输出
sleep(10);
echo session::get('test'); // 已过期
?>

相关免费推荐:编程视频课程

热心网友 时间:2022-04-06 00:34

大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设置一下session过期时间。
对此,可以在PHP中,设置php.ini,找到session.gc_maxlifetime = 1440 #(PHP5默认24分钟)
这里你可以随便设置一下过期时间.但是有人说设置以后,好象不起作用!
其实不是不起作用,而是因为系统默认:
session.gc_probability = 1
session.gc_divisor = 1000

garbage collection 有个概率的,1/1000就是session 1000次才有一次被回收。
只要你的访问量大了,那就能达到回收的效果.
或者你也可以设置一下session.gc_divisor 的值,
比如:session.gc_divisor = 1,这样就能明显的看到SESSION过期的效果了.
我们最常用的是在php程序中设置,如下例程序所示:
<?php
if(!isset($_SESSION['last_access'])||(time()-$_SESSION['last_access'])>60)
$_SESSION['last_access'] = time();
?>

这样就搞定了,如果要设置已过期的话也可以在程序中实现:
<?php
unset($_SESSION['last_access']);// 或 $_SESSION['last_access']='';
?>
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
橙子冷藏能保存多久 橙子会过期吗 新鲜橙子如何保存更久 橙子保鲜剂对人体有害吗 粒上皇开口熟栗120g*5袋(共600g)-详细介绍 三皇王板栗介绍 品牌榜:2024年板栗十大品牌排行榜 投票结果公布【新】 为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 西门子的电机是哪里产的 如何配置服务器session过期时间 西门子PLC在哪里生产 session 失效 时间 如何解决session时间过期 国产西门子冰箱是哪个地方生产的 一个用户登陆查询管理系统的session有效时间一般设置多少时间? 怎么设置session超时时间 java如何对SESSION设置有效时间! 关于session的过期时间和cookie的过期时间,其具体意思到底是什么... 如何设置session有效时间 怎样设置session时间,在哪里设置 微信投票主办方后台会查的吗, 如何让自己在家学习 自己怎么在家练声?练歌? 要能把嗓子练好的那种 自己在家怎样练形体? 如何自己在家高效自习 济南蓝翔技校还有手机维修班吗 学手机维修需要多少费用?急!急! 山东万全学修手机怎么样,他家是卖配件和维修一体的综合性,谁去学过, php设置session时间 如何设置session的生存时间 jsp 如何设置session时间 java 网站中session 有默认的过期时间吗 如何查看一个session存活的时间 可以设置某个session的时间吗? 怎么设置session的有效时间 jsp 中设置session 默认时间为多久 session 默认过期时间到底怎么设置 三星堆是哪个朝代的? 三星堆发现最大面积丝绸残留物,具有怎样的考古价值? 三星堆发现了最大面积丝绸残留物,对此你怎么看? 三星堆最大青铜尊被提取,繁盛一时的三星堆文明为何突然消失? 三星堆发现最大面积丝绸残留物,那个时代就已经有丝绸制品了吗? 三星堆最大青铜尊浮土清理真容,三星堆到底有没有蕴藏着别的文明? 三星堆最大青铜尊被提取,你是什么时候开始了解三星堆遗址的? 三星堆最大青铜尊浮土清理露真容,你知道它曾经还出土过什么文物吗?_百 ... 北京现在房子还能抵押贷款吗 用房子抵押贷款买房子,最长可以贷多少年? 如果在北京公积金贷款买房后,款项尚未还清,可以用这个房子做抵押贷款吗?