关于PHP中Session文件过多的问题及session文件保存位置


Posted in PHP onMarch 17, 2016

PHP的默认机制:每一次php请求,会有1/100的概率(默认值)触发“session回收”。如果“session回收”发生,那就会检查/tmp/sess_*的文件,如果最后的修改时间到现在超过了1440秒(gc_maxlifetime的值),就将其删除,意味着这些session过期失效

一、session文件是什么

文件一般为 /tmp/sessions/sess_4b1e384ad74619bd212e236e52a5a174If

username|s:9:"test";admin|s:1:"0";

二、session回收何时发生

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

#概率是gc_probability/gc_divisor
session.gc_probability = 1
session.gc_divisor = 100

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

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

三、设置session存储目录

使用php5-fpm的话, 修改/etc/php5/fpm/php.ini, 修改或添加下面一行:

session.save_path = 3;600:/tmp/sessions

四、session清除脚本

#!/bin/sh
find /tmp/php-session -cmin +24 -name "sess_*" -and -size 0 -delete > /dev/null 2>&1
find /tmp/php-session -cmin +1440 -name "sess_*" -delete > /dev/null 2>&1

这里的时间我们可以通过 session.gc_maxlifetime 来获取,放到定时任务里面即可(crontab)

其他方式

使用memcache 等 ,(session.save_handler = memcache)

使用cookie,但是cookie得加密

五、使用tmfs存储session

1、将/tmp挂载为 tmpfs文件系统

修改/etc/fstab,在最后一行添加如下内容:/tmp/sessions tmpfs defaults,size=5120m 0 0

mount -a 

2、创建session存储文件夹

php并不会自动去创建这些文件夹,不过在源文件中提供了一些创建文件夹的脚本。下面这个脚本也好用,脚本内容如下

#!/bin/sh
dir="0 1 2 3 4 5 6 7 8 9 a b c d e f"
for levela in $dir;
do
for levelb in $dir;
do
for levelc in $dir;
do
mkdir -p /tmp/sessions/$levela/$levelb/$levelc;
done
done;
done
chown -R root:webgrp /tmp/sessions && chmod -R 1777 /tmp/sessions

因为/tmp/sessions是用的内存,服务器重启后,里面的所有文件都会丢失,所以,需要把上面的脚本加入到 /etc/rc.local中,并且要放在启动php之前

3、将session存储到不同的目录中

php本身支持session的多级散列,在php.ini中,将 ;session.save_path = /tmp 改为

session.save_path = "3;/tmp/sessions

4、session的回收

使用上面的脚本即可

下面给大家说下php session 数据保存在哪里?

当然是在服务器端,但不是保存在内存中,而是保存在文件或数据库中。

默认情况下,php.ini 中设置的 SESSION 保存方式是 files(session.save_handler = files),即使用读写文件的方式保存 SESSION 数据,而 SESSION 文件保存的目录由 session.save_path 指定,文件名以 sess_ 为前缀,后跟 SESSION ID,如:sess_c72665af28a8b14c0fe11afe3b59b51b。文件中的数据即是序列化之后的 SESSION 数据了。

如果访问量大,可能产生的 SESSION 文件会比较多,这时可以设置分级目录进行 SESSION 文件的保存,效率会提高很多,设置方法为:session.save_path="N;/save_path",N 为分级的级数,save_path 为开始目录。

当写入 SESSION 数据的时候,PHP 会获取到客户端的 SESSION_ID,然后根据这个 SESSION ID 到指定的 SESSION 文件保存目录中找到相应的 SESSION 文件,不存在则创建之,最后将数据序列化之后写入文件。读取 SESSION 数据是也是类似的操作流程,对读出来的数据需要进行解序列化,生成相应的 SESSION 变量。

PHP 相关文章推荐
php 代码优化的42条建议 推荐
Sep 25 PHP
php写的简易聊天室代码
Jun 04 PHP
PHP求最大子序列和的算法实现
Jun 24 PHP
基于PHP读取TXT文件向数据库导入海量数据的方法
Apr 23 PHP
php float不四舍五入截取浮点型字符串方法总结
Oct 28 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
Sep 24 PHP
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
Nov 29 PHP
分享一个Laravel好用的Cache宏
Mar 02 PHP
PHP7多线程搭建教程
Apr 21 PHP
PHP生成(支持多模板)二维码海报代码
Apr 30 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
Feb 14 PHP
PHP匿名函数(闭包函数)详解
Mar 22 PHP
Symfony2学习笔记之模板用法详解
Mar 17 #PHP
Symfony的安装和配置方法
Mar 17 #PHP
Symfony2中被遗弃的getRequest()方法分析
Mar 17 #PHP
php文件缓存方法总结
Mar 16 #PHP
php常用图片处理类
Mar 16 #PHP
PHP匿名函数和use子句用法实例
Mar 16 #PHP
PHP Static延迟静态绑定用法分析
Mar 16 #PHP
You might like
模拟xcopy的函数
2006/10/09 PHP
复杂检索数据并分页显示的处理方法
2006/10/09 PHP
jQuery学习笔记之DOM对象和jQuery对象
2010/12/22 Javascript
JavaScript中的null和undefined解析
2012/04/14 Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
2015/04/15 Javascript
全面解析Bootstrap表单使用方法(表单按钮)
2015/11/24 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
2015/12/15 Javascript
JavaScript隐式类型转换
2016/03/15 Javascript
javascript特效实现——当前时间和倒计时效果的简单实例
2016/07/20 Javascript
ES6中Proxy代理用法实例浅析
2017/04/06 Javascript
详解基于vue的移动web app页面缓存解决方案
2017/08/03 Javascript
vue中过滤器filter的讲解
2019/01/21 Javascript
详解Vue中watch对象内属性的方法
2019/02/01 Javascript
React中阻止事件冒泡的问题详析
2019/04/12 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
JS数组中对象去重操作示例
2019/06/04 Javascript
vue elementUI使用tabs与导航栏联动
2019/06/21 Javascript
夯基础之手撕javascript继承详解
2020/11/09 Javascript
Vue 401配合Vuex防止多次弹框的案例
2020/11/11 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
python使用turtle库绘制树
2018/06/25 Python
python 实现将txt文件多行合并为一行并将中间的空格去掉方法
2018/12/20 Python
Python嵌套函数,作用域与偏函数用法实例分析
2019/12/26 Python
Python 3.8 新功能来一波(大部分人都不知道)
2020/03/11 Python
python为什么会环境变量设置不成功
2020/06/23 Python
德国旅行、体验和活动的预订平台:Watado
2019/12/04 全球购物
童装店创业计划书
2014/01/09 职场文书
体育教师自我鉴定
2014/02/12 职场文书
工作说明书范文
2014/05/07 职场文书
投标诚信承诺书
2014/05/26 职场文书
个人承诺书格式
2014/06/03 职场文书
法制宣传口号
2014/06/16 职场文书
2014年库房工作总结
2014/11/26 职场文书
清洁工工作总结
2015/08/11 职场文书
党员学习中国梦心得体会
2016/01/05 职场文书
2019送给家人们的中秋节祝福语
2019/08/15 职场文书