首页 > PHP资讯 > PHP培训技术 > php培训学习——Session的存取优化

php培训学习——Session的存取优化

PHP培训技术
PHP中Session默认以文本文件的形式,保存在同一个目录中,但是很多的文件在一个目录中保存,会导致磁盘存取速度变得缓慢(一些操作系统对目录中的文件数量也存在限制)。
 
解决方法如下:
 
>分配每个用户的Session数据,保存到各自所属的目录中。
>分割Session到更多层次的目录。
 
当并发访问很大或者Session建立太多,在这两个目录下就会存在大量类似sess_xxxxxx的Session数据文件,同一个目录下文件数过多会导致性能下降,并易受到攻击,进而会出现诸如文件系统错误等问题。 因此,我们必须进行Session数据的存储优化,具体的实现方法为:
 
在php.ini配置文件中,在Session设置部分中有这样一个参数,它在PHP 5中默认是关闭的:
 
;session.save_path = "N;/path"
 
这项设置使我们可以给Session存放目录进行多级散列,其中“N”表示要设置的目录级数,“MODE”表示目录的权限属性,默认值为600,在Windows上基本是不用设置的,在UNIX和Linux系统上也可以不用设置,后面的“/path”表示Session文件存放的根目录路径,比如我们修改设置为下面的格式:
 
session.save_path = "2;/tmp/phpsession"
 
这个设置表示我们把/tmp/phpsession目录作为PHP的Session文件存放根目录,在该目录下进行两级目录排列。每一级目录分别以0-9和a-z共36个字母数字组合为目录名,这样存放Session的目录可以达到36*36个,相信作为单台服务器来说完全够用了,如果你的系统为很多个虚拟主机或多台服务器共享一个Session数据,可以把目录级增加到3级或者更多。需要注意的是,PHP自己并不会自动创建子目录,需要我们自己动手去创建。
>可以修改php.ini中Session的保存路径,或调用PHP的session_cookie_path自定义Session保存路径,用法为:ini_set(’session.save_path',7usr/local/www/session");。
>使用数据库Session保存机制,如MySQL, Oracle等数据库的表中。
>使用轮询的Session存储机制,像共享内存,通过MM Cache等Session软件来实现共享内存。
前面我们提到过php.ini中的session_sava_handler,这个参数就是用来实现轮询的存储机制的。
 

本文由欣才IT学院整理发布,未经许可,禁止转载。