PHP里的SESSION默认是用文件来保存的,如session.save_path=/tmp,则是将session数据保存在/tmp目录下,如果并发用户量很大,在这个目录下就会存在大量类似sess_xxxxxx的session文件,导致性能下降,不少朋友可能都没有注意到php.ini里面Session设置部分中有这样一项:
; session.save_path = “N; MODE; /path”
这项设置提供给我们可以给session存放目录进行多级散列,其中“N”表示要设置的目录级数,“MODE”表示目录的权限属性,默认为600,在WINDOWS上基本是不用设置的,*NIX上也可以不用设置,后面的“/path”表示session文件存放的根目录路径,比如我们设置为下面的格式
session.save_path = “2; d:/php5/tmp”
上面的设置表示我们把d:/php5/tmp目录作为php的session文件存放根目录,在该目录下进行两级目录散列,每一级目录分别是0-9和a-z共36个字母数字为目录名,这样存放session的目录可以达到36*36个,相信作为单台服务器来说,这是完全够用了,如果说您的系统架构设计为多台服务器共享session数据,可以把目录级增加到3级或者更多。
需要注意的是,php自己并不会自动创建子目录,需要您自己动手去创建,网上找到这样的自动创建目录的代码,大家可以做个参考。下面的代码自动创建3级子目录,可以自己动手根据需要进行修改。

<?  
set_time_limit(0);
$str="0123456789abcdefghijklmnopqrstuvwxyz";
$length=strlen($str);
function mkdir($param){
    if(!file_exists($param))
    {
        makedir(dirname($param));
        mkdir($param);
    }
} 

for ($i=0;$i<$length;$i++){
    for ($j=0;$j<$length;$j++){
        for ($k=0;$k<$length;$k++){
            makedir($str[$i].'/'.$str[$j].'/'.$str[$k]);
        }
    }
}
?>

多服务器共享session的方法:
1.通过NFS文件共享的方式,多台WEB服务器共享保存session文件的磁盘
2.保存在数据库中,这种方式的扩展性很强,可以随意增加WEB而不受影响
3.可以将session数据保存在memcached中,memcached是基于内存存储数据的,性能很高,用户并发量很大的时候尤其合适,参考PHP实现多服务器session共享之memcache共享
4.文件方式保存session时,可以采用php的扩展eaccelerator来存储sesion

源链接

Hacking more

...