广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php如何设置session失效时间
  • 514
分享到

php如何设置session失效时间

2023-06-15 09:06:02 514人浏览 薄情痞子
摘要

这篇文章主要为大家展示了“PHP如何设置session失效时间”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php如何设置session失效时间”这篇文章吧。php设置session失效时间的方

这篇文章主要为大家展示了“PHP如何设置session失效时间”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php如何设置session失效时间”这篇文章吧。

php设置session失效时间的方法:1、打开php.ini,找到并设置“session.GC_maxlifetime=1440”;2、设置“session.gc_pisor”的值;3、在php程序中设置过期时间。

本文操作环境:windows7系统、PHP7.1版,DELL G3电脑

php中实现精确设置session过期时间的方法

大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设置一下session过期时间。

对此,可以在PHP中,设置php.ini,找到session.gc_maxlifetime = 1440 #(PHP5默认24分钟)
这里你可以随便设置一下过期时间.但是有人说设置以后,好象不起作用!
其实不是不起作用,而是因为系统默认:

session.gc_probability = 1session.gc_pisor = 1000

garbage collection 有个概率的,1/1000就是session 1000次才有一次被回收。
只要你的访问量大了,那就能达到回收的效果.
或者你也可以设置一下session.gc_pisor 的值,
比如:session.gc_pisor = 1,这样就能明显的看到SESSION过期的效果了.

我们最常用的是在php程序中设置,如下例程序所示:

<?phpif(!isset($_SESSION['last_access'])||(time()-$_SESSION['last_access'])>60)$_SESSION['last_access'] = time();?>

这样就搞定了,如果要设置已过期的话也可以在程序中实现:

<?phpunset($_SESSION['last_access']);// 或 $_SESSION['last_access']='';?>

session有过期的机制:

session.gc_maxlifetime 原来session 过期是一个小概率的事件,分别使用session.gc_probability和session.gc_pisor 来确定运行session 中gc 的概率 session.gc_probability和session.gc_pisor的默认值分别为 1和100。分别为分子和分母 所以session中gc的概率运行机会为1% 。如果修改这两个值,则会降低php的效率。所以这种方法是不对的!!
因此,修改php.ini文件中的gc_maxlifetime变量就可以延长session的过期时间了:(例如,我们把过期时间修改为86400秒)
session.gc_maxlifetime = 86400
然后,重启你的WEB服务(一般是apache)就可以了。

session“回收”何时发生:

默认情况下,每一次php请求,就会有1/100的概率发生回收,所以可能简单的理解为“每100次php请求就有一次回收发生”。这个概率是通过以下参数控制的
#概率是gc_probability/gc_pisor

session.gc_probability = 1session.gc_pisor = 100

注意1:假设这种情况gc_maxlifetime=120,如果某个session文件最后修改时间是120秒之前,那么在下一次回收(1/100的概率)发生前,这个session仍然是有效的。

注意2:如果你的session使用session.save_path中使用别的地方保存session,session回收机制有可能不会自动处理过期session文件。这时需要定时手动(或者crontab)的删除过期的session:

cd /path/to/sessions; find -cmin +24 | xargs rm

PHP中的session永不过期

不修改程序是最好的方法了,因为如果修改程序,测试部一定非常郁闷,那么只能修改系统环境配置,其实很 简单,打开php.ini设置文件,修改三行如下:

1、session.use_cookies

把这个的值设置为1,利用cookie来传递sessionid

2、session.cookie_lifetime

这个代表SessionID在客户端Cookie储存的时间,默认是0,代表浏览器一关闭SessionID就作废……就是因为这个所以PHP的 session不能永久使用! 那么我们把它设置为一个我们认为很大的数字吧,999999999怎么样,可以的!就这样。

3、session.gc_maxlifetime

这个是Session数据在服务器端储存的时间,如果超过这个时间,那么Session数据就自动删除! 那么我们也把它设置为99999999。

就这样一切ok了,当然你不相信的话就测试一下看看——设置一个session值过个10天半个月的回来看看,如果你的电脑没有断电或者宕机,你仍然可以看见这个sessionid。

当然也可能你没有控制服务器的权限并不能像我一样幸运的可以修改php.ini设置,一切依靠我们自己也是有办法的,当然就必须利用到客户端存储 cookie了,把得到的sessionID存储到客户端的cookie里面,设置这个cookie的值,然后把这个值传递给session_id()这 个函数,具体做法如下:

<?phpsession_start(); // 启动Session $_SESSION['count']; // 注册Session变量Count isset($PHPSESSID)?session_id($PHPSESSID):$PHPSESSID = session_id(); // 如果设置了$PHPSESSID,就将SessionID赋值为$PHPSESSID,否则生成SessionID $_SESSION['count']++; // 变量count加1 setcookie('PHPSESSID', $PHPSESSID, time()+3156000); // 储存SessionID到Cookie中 echo $count; // 显示Session变量count的值 ?>

session失效不传递

我们先写个php文件:<?=phpinfo()?>, 传到服务器去看看服务器的参数配置。
转到session部分,看到session.use_trans_sid参数被设为了零。
这个参数指定了是否启用透明SID支持,即session是否随着URL传递。我个人的理解是,一旦这个参数被设为0,那么每个URL都会启一个session。这样后面页面就无法追踪得到前面一个页面的session,也就是我们所说的无法传递。两个页面在服务器端生成了两个session文件,且无关联。(此处精确原理有待确认)
所以一个办法是在配置文件php.ini里把session.use_trans_sid的值改成1。

当然我们知道,不是谁都有权限去改php的配置的,那么还有什么间接的解决办法呢?
下面就用两个实例来说明:
文件1 test1.php

<?php//表明是使用用户ID为标识的sessionsession_id(SID);//启动sessionsession_start();//将session的name赋值为Havi$_SESSION['name']="Havi";//输出session,并设置超链接到第二页test2.phpecho "<a href="test2.php" rel="external nofollow" >".$_SESSION['name']."</a>";?>

文件2: test2.php

<?php表明是使用用户ID为标识的sessionsession_id(SID);//启动sessionsession_start();//输出test1.php中传递的session。echo "This is ".$_SESSION['name'];?>

所以,重点是在session_start();前加上session_id(SID);,这样页面转换时,服务器使用的是用户保存在服务器session文件夹里的session,解决了传递的问题。
不过有朋友会反映说,这样一来,多个用户的session写在一个SID里了,那Session的价值就发挥不出来了。所以还有一招来解决此问题,不用加session_id(SID);前提是你对服务器的php.ini有配置的权限:
output_buffering改成ON,道理就不表了。
第二个可能的原因是对服务器保存session的文件夹没有读取的权限,还是回到phpinfo.php中,查看session保存的地址:

session.save_path: var/tmp

所以就是检查下var/tmp文件夹是否可写。
写一个文件:test3.php来测试一下:

<?phpecho var_dump(is_writeable(ini_get("session.save_path")));?>

如果返回bool(false),证明文件夹写权限被限制了,那就换个文件夹咯,在你编写的网页里加入:

//设置当前目录下session子文件夹为session保存路径。$sessSavePath = dirname(__FILE__).'/session/';//如果新路径可读可写(可通过FTP上变更文件夹属性为777实现),则让该路径生效。if(is_writeable($sessSavePath) && is_readable($sessSavePath)){session_save_path($sessSavePath);}

以上是“php如何设置session失效时间”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网PHP编程频道!

--结束END--

本文标题: php如何设置session失效时间

本文链接: https://www.lsjlt.com/news/279482.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • php如何设置session失效时间
    这篇文章主要为大家展示了“php如何设置session失效时间”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php如何设置session失效时间”这篇文章吧。php设置session失效时间的方...
    99+
    2023-06-15
  • SpringBoot2.x如何设置Session失效时间及失效跳转
    这篇文章给大家分享的是有关SpringBoot2.x如何设置Session失效时间及失效跳转的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。设置Session失效时间及失效跳转#Session超时时间设置,单位是秒...
    99+
    2023-06-29
  • SpringBoot2.x设置Session失效时间及失效跳转方式
    目录设置Session失效时间及失效跳转Session失效后如何跳转到Session失效地址设置Session失效的几种方式如果是1.5.6版本还可以设置设置Session失效时间及...
    99+
    2022-11-13
  • php如何设置session时间
    本文小编为大家详细介绍“php如何设置session时间”,内容详细,步骤清晰,细节处理妥当,希望这篇“php如何设置session时间”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在使用PHP编写Web应用程序...
    99+
    2023-07-05
  • session php默认失效时间是多少
    本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。session php默认失效时间是多少?php中的session有效期默认是1440秒(24分钟),也就是说,客户端超过24分钟没有刷新,当前session就会失效...
    99+
    2022-11-01
  • session php默认失效时间是什么
    本文小编为大家详细介绍“session php默认失效时间是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“session php默认失效时间是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。session...
    99+
    2023-07-04
  • php设置session保存时间
    在网站开发中,session是一种非常重要的机制,它可以帮助网站保存用户的登录信息、购物车数据和其他的类似信息,以便在用户浏览网站的过程中保持数据的一致性。通常情况下,session的存储时间是非常短暂的,因为一旦用户关闭了浏览器,sess...
    99+
    2023-05-22
  • Java如何设置session超时时间
    小编给大家分享一下Java如何设置session超时时间,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在一般系统登录后,都会设置一个当前session失效的时间,...
    99+
    2023-06-06
  • redis如何设置key缓存失效时间
    Redis中可以使用`EXPIRE`命令设置一个key的缓存失效时间。命令格式如下:```EXPIRE key seconds```...
    99+
    2023-09-05
    redis
  • Springboot2 session设置超时时间无效的解决
    问题: 今天项目中遇到了一个设置时间超时的问题,按SpringBoot2的application.properties更改一直不生效。 解决方案: server.*属性用于...
    99+
    2022-11-12
  • 设置session有效时间的三种方式
    目录设置session有效时间的三种方式方法一方法二方法三session详细解析(是否过期、失效时间)总结设置session有效时间的三种方式 session的默认有效时间是30分钟...
    99+
    2023-05-19
    设置session有效时间 设置session时间 session时间设置
  • php如何设置cookie有效时间即时生效
    本文小编为大家详细介绍“php如何设置cookie有效时间即时生效”,内容详细,步骤清晰,细节处理妥当,希望这篇“php如何设置cookie有效时间即时生效”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在编写PH...
    99+
    2023-07-05
  • kafka怎么设置数据失效时间
    Kafka本身不提供数据失效时间的设置功能。Kafka是一个分布式消息队列,它主要负责消息的持久化和流式处理。消息在Kafka中会被...
    99+
    2023-10-27
    kafka
  • Springboot2 session设置超时时间无效的解决方法
    本篇内容介绍了“Springboot2 session设置超时时间无效的解决方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题:今天项目...
    99+
    2023-06-20
  • php设置session时间的方法是什么
    PHP设置session时间的方法是通过在PHP代码中使用session_set_cookie_params()函数来设置。该函数用...
    99+
    2023-08-17
    session php
  • JavaScript中Cookie的使用之如何设置失效时间
    目录1.什么是Cookie?1.1简介1.2特点2.JavaScript操作Cookie2.1基础操作2.2设置失效时间总结1.什么是Cookie? 1.1简介 主要用于存储访问过的...
    99+
    2022-12-08
    JavaScript Cookie Cookie的使用 Cookie设置失效时间
  • 设置cookie指定时间失效怎么办
    小编给大家分享一下设置cookie指定时间失效怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!实例如下:<!DOCTY...
    99+
    2022-10-19
  • 设置session过期时间不生效怎么解决
    如果设置session过期时间不生效,可能是由于以下原因:1. 服务器配置问题:检查服务器的session配置是否正确。确保sess...
    99+
    2023-08-17
    session
  • php如何防止session 失效
    这篇文章给大家分享的是有关php如何防止session 失效的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php防止session失效的方法:1、创建一个PHP示例文件;2、执行“$_SESSION['r...
    99+
    2023-06-22
  • 设置Cookie时间失效的代码怎么写
    这篇“设置Cookie时间失效的代码怎么写”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“设...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作