php网站源码 设置有效时间,精确设置php中session过期时间的方法
session过期时间在大多数据情况下我们是设置默认的时间,如果我们有一些特殊的要求可以设置一下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程序中设置
代码如下
复制代码
这样就搞定了,如果要设置过期的话也可以在程序中实例
session有过期的机制
session.gc_maxlifetime 原来session 过期是一个小概率的事件,分别使用session.gc_probability和session.gc_divisor 来确定运行session 中gc 的概率 session.gc_probability和session.gc_divisor的默认值分别为 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_divisor
session.gc_probability = 1
session.gc_divisor = 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()这 个函数,具体做法如下:
代码如下
复制代码
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
".$_SESSION['name']."";
?>
文件2: test2.php
所以,重点是在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来测试一下:
代码如下
复制代码
echo 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中文网,转载请注明出处,感谢您的尊重!
php网站源码 设置有效时间,精确设置php中session过期时间的方法相关推荐
- 设置session时间 php,php中实现精确设置session过期时间的方法
这篇文章主要介绍了php中实现精确设置session过期时间的方法,需要的朋友可以参考下 大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设置一 ...
- php中session时间,php中session过期时间的设置方法
php中session过期时间的设置方法 发布时间:2020-04-22 10:21:19 来源:亿速云 阅读:140 作者:小新 今天小编给大家分享的是php中session过期时间的设置方法,相信 ...
- cookielifetime php_php中实现精确设置session过期时间的方法
大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设置一下session过期时间. 对此,可以在PHP中,设置php.ini,找到session. ...
- php修改sessiob时间_php中session过期时间设置
网上很多人给出了解答:修改php配置文件中的session.gc_maxlifetime.如果想了解更多session回收机制,继续阅读.(本文环境php5.2) 概述:每一次php请求,会有1/10 ...
- 优雅地寻找网站源码(一)
优雅地寻找网站源码(一) 0x0 前言 渗透过程中如果能获取到网站的源代码,那么无疑开启了上帝视角.虽然之前出现过不少通过搜索引擎查找同类网站,然后批量扫备份的思路,但是却没人分享其具体过程,这里笔者 ...
- 自动采集高清壁纸网站源码 二次美化版
介绍: 美化自动采集高清壁纸网站源码,还不错,需要的下载吧,使用方法将源码上传至空间访问即可 网盘下载地址: http://kekewl.org/y0nW2Eizkyv0 图片:
- 教育培训网站源码,大班课/小班课线上直播都能用
随着时间的推移,教育培训模式在不断发生变化中,通过APP线上直播,把线下培训和手机移动学习做有效的整合,这种便捷的培训模式正被越来越多的人所接受.那么教育培训网站源码开发有什么优势呢? <met ...
- PHP项目管理系统网站源码+方便码农设计开发
正文: PHP项目管理系统网站源码,方便程序员设计开发项目进度跟进. 安装方法: 直接打开 域名+/www 在线安装 程序: wwuref.lanzoup.com/iGlRx0cgb55a 图片:
- graylog+kafka+zookeeper(单机测试及源码),graylog设置URL报警方式(五)
graylog+kafka+zookeeper(单机测试及源码),graylog设置URL报警方式(五) 问题背景 graylog+kafka+zookeeper(单机测试及源码),graylog组件 ...
最新文章
- 位运算与组合搜索(二)
- BUUCTF-Reverse:SimpleRev(算法分析题)
- 富文本编辑器中空格转化为a_如何对富文本编辑器(FCK Html Editor)的工具栏进行扩展?...
- httpinvoker远程调用超时_RPC远程过程调用协议工作原理分析
- sdram 时钟相位_stm32f429主频大于160MHz时,sdram数据不稳定
- java泛型 算法_非常具体的Java泛型问题 – 如何返回传递给方法的相同类型?
- python中流程图_python用graphviz画流程图
- 浅谈数据结构-选择排序(简单、堆排序)
- 基于Tensorflow的神经网络解决用户流失概率问题
- Go基础:函数与方法的区别
- 谈谈RJ45线序的打法及口诀
- 新世纪音乐——天籁之音
- 美文:远方究竟有多远
- java emoji表情_java处理emoji表情的方法
- word粘贴 默认html,如何更改Microsoft Word中的默认粘贴设置 | MOS86
- Modelsim仿真过程(完整版)
- Scrum框架详解总结
- 如何书写游戏设计文档
- 百炼---大数的乘法
- ROS入门之乌龟圆周运动
热门文章
- 上海市浦东新区专利预审服务备案主体管理办法
- 数据抓取必须学会的三种技术
- 如何使用CMD操纵MySQL数据库?
- 【情感识别】基于matlab BP神经网络语音情感识别【含Matlab源码 349期】
- MongoDB文档的CRUD
- 显示http500内部服务器错误,http500内部服务器错误,小编教你HTTP 500 内部服务器错误怎么解决...
- Linux 显示IP地理位置 qqwry系列小工具
- Android.mk文件学习
- Linux下permission denied
- idea插件开发-开发属于自己的IDE开发平台