> 백엔드 개발 > PHP 튜토리얼 > 关于PHP中Session文件过多的有关问题

关于PHP中Session文件过多的有关问题

WBOY
풀어 주다: 2016-06-13 12:28:57
원래의
1024명이 탐색했습니다.

关于PHP中Session文件过多的问题

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_divisorsession.gc_probability = 1session.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/shfind /tmp/php-session -cmin +24 -name "sess_*" -and -size 0 -delete > /dev/null 2>&1find /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/shdir="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;donechown -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 改为

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿