关于PHP中Session文件过多的问题
PHP的默认机制:每一次php请求,会有1/100的概率(默认值)触发“session回收”。如果“session回收”发生,那就会检查/tmp/sess_*的文件,如果最后的修改时间到现在超过了1440秒(gc_maxlifetime的值),就将其删除,意味着这些session过期失效
一、session文件是什么
文件一般为 /tmp/sessions/sess_4b1e384ad74619bd212e236e52a5a174If
1
|
username|s:9: "test" ;admin|s:1: "0" ;
|
二、session回收何时发生
默认情况下,每一次php请求,就会有1/100的概率发生回收,所以可能简单的理解为“每100次php请求就有一次回收发生”。这个概率是通过以下参数控制的
1
2
3
|
#概率是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
, 修改或添加下面一行:
1
|
session.save_path = 3;600:/tmp/sessions
|
四、session清除脚本
1
2
3
4
|
#!/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
1
|
mount -a
|
2、创建session存储文件夹
php并不会自动去创建这些文件夹,不过在源文件中提供了一些创建文件夹的脚本。下面这个脚本也好用,脚本内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#!/bin/sh
dir = "0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z"
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 www:www /tmp/sessions && chmod -R 1777 /tmp/sessions
|
因为/tmp/sessions是用的内存,服务器重启后,里面的所有文件都会丢失,所以,需要把上面的脚本加入到 /etc/rc.local中,并且要放在启动php之前
3、将session存储到不同的目录中
php本身支持session的多级散列,在php.ini中,将 ;session.save_path = /tmp 改为
1
|
session.save_path = "3; /tmp/sessions"
|
4、session的回收
使用上面的脚本即可
rm -f /tmp/sess_*
转载于:https://www.cnblogs.com/waw/p/10615487.html
关于PHP中Session文件过多的问题相关推荐
- php启动 大量sess文件,关于PHP中Session文件过多的有关问题
关于PHP中Session文件过多的问题 PHP的默认机制:每一次php请求,会有1/100的概率(默认值)触发"session回收".如果"session回收" ...
- php启动 大量sess文件,关于PHP中Session文件过多的问题
PHP的默认机制:每一次php请求,会有1/100的概率(默认值)触发"session回收".如果"session回收"发生,那就会检查/tmp/sess_*的 ...
- php session位置,关于PHP中Session文件过多的问题及session文件保存位置
PHP的默认机制:每一次php请求,会有1/100的概率(默认值)触发"session回收".如果"session回收"发生,那就会检查/tmp/sess_*的 ...
- Session的原理,大型网站中Session方面应注意什么?
一.Session和Cookie的区别 Session是在服务器端保持会话数据的一种方法(通常用于pc端网站保持登录状态,手机端通常会使用token方式实现),存储在服务端. Cookie是在客户端保 ...
- redis/分布式文件存储系统/数据库 存储session,解决负载均衡集群中session不一致问题...
先来说下session和cookie的异同 session和cookie不仅仅是一个存放在服务器端,一个存放在客户端那么笼统 session虽然存放在服务器端,但是也需要和客户端相互匹配,试想一个浏览 ...
- php 删除 session 文件,如何删除php中的session文件
如何删除php中的session文件 发布时间:2020-07-23 17:18:57 来源:亿速云 阅读:106 作者:Leah 如何删除php中的session文件?相信很多没有经验的人对此束手无 ...
- Hive中数据倾斜和小文件过多的解决方案
数据倾斜: 任务进度长时间维持在99%(或100%),查看任务监控页面,发现只有少量(1个或几个)reduce子任务未完成.因为其处理的数据量和其他reduce差异过大. 原因:某个reduce的数据 ...
- c中session的用法
c中session的用法你知道吗?下面小编就跟你们详细介绍下c中session的用法,希望对你们有用. c中session的用法如下: Session的基本属性: 一.属性 1.SessionID S ...
- session文件无法并发操作
session_start():打开服务器上的session文件. session_commit():会把$_SESSION数组的内容写入到服务器上的session文件中,但不会清空$_SESSION ...
最新文章
- 深度学习到底有哪些卷积?
- Javascript Patterns--读书笔记8 (Factory)
- 推荐算法炼丹笔记:CTR点击率预估系列入门手册
- Volatile关键字的详解
- 在同一个机器上布署两个JBOSS,要修改那些端口?
- linux+kill+进程和线程,在LINUX系统中 关于进程和线程终止的问题
- 数据字典模板_巧用单元格保护功能+字典技术,制作高大上的人员信息录入表...
- cmd 笔记(随时补充)
- 从 JavaScript 到 TypeScript 6 - Vue 引入 TypeScript
- Android Cursor浅析
- asp.net 微信小程序源码 微信分销源码 源文件完全开源 源码
- 关于未知的USB设备(设备描述符请求失败)的解决方法。
- C++实现24点游戏
- java 分解质因数
- 谷歌统计代码使用方式
- 如何选择工业中CCD相机与CMOS相机
- android wms各个类的作用,Android系统服务 —— WMS
- English语法_不定代词 - 概述
- 阿里资深架构师推荐:企业架构理论及其在国内金融业的实践综述
- python有道批量单词音标整理-python实现有道翻译(逐行读文本)