今天没事的时候看看网站后台,发现C:\windows\temp下,有大概好几万个sess_开头的文件,着实把我惊到了。
有点强迫症的我,开始了一些探究。
探究主题
1) sessIOn文件存放位置的自定义
2) session文件的定期删除
自定义Session文件位置
这个在网络上已经有很多教程了,就不过多描述。主要的步骤如下:
1) 打开php.ini,修改session.save_path的值,比如,你想将session文件存放到D盘下的Test目录,则可以设置为:
session.save_path = “D:\Test”
需要注意如下几点:
1.1 存放的目录必须存在,如果不存在,则先手动创建
1.2 路径加双引号
2) 设置写入权限。如果使用IIS的话,需要在存放目录添加IUser对该目录的写入权限。这一点很重要,如果没有设置写入权限,你的站点依然看起来可以正常工作,但是session文件会写入失败,且错误日志不会有任何错误提示。
3) 重启IIS时配置生效。
Session文件的定期删除
修改了Session文件的存放位置,依然没有解决Session文件长时间积累会越来越多的问题。
我们可以在Windows任务中添加一个周期性的任务,自动删除过期的Session文件。
删除脚本如下:
解释如下
/p “D:\Test” 指定开始搜索的路径,这里搜索的是D盘下的Test目录。
/s 启用递归搜索。
/m sess_* 使用通配符,这里仅搜索以sess_开头的文件。
/d -1 搜索修改日期为当前脚本执行日期的前一天的文件。
/c “cmd /c del @path” 对每一个搜索到的文件执行的指令,这里对所有前一天的sess_开头的文件执行了删除动作。@path为目标文件的全路径。
将以上指令保存为bat文件并放到Windows任务里,每天定时执行一次就可以了。
总结
将session保存到文件,仅仅针对的是小型站点,如果是大型海量用户的站,则会因为产生巨量的session文件导致大量的文件IO,使得网站的性能下降,这个时候,就需要考虑将Session迁移至数据库或者缓冲中了,例如MySQL或者Redis。