一、session时间周期设置
方法1:
在php文件中添加如下代码:
/* 控制session时间*/
$lifetime=60*90;
session_set_cookie_params($lifetime);
session_regenerate_id(true);
方法2:
修改php.ini文件:
要实现Session的永久生命期,首先需要了解一下php.ini关于Session的相关设置
(打开php.ini文件,在“[Session]”部分):
1、session.use_cookies:默认的值是“1”,代表SessionID使用Cookie来传递,反之就是使用Query_String(url中?后的值)来传递;
2、session.name:这个就是SessionID储存的变量名称,可能是Cookie,也可能是
Query_String来传递,默认值是”PHPSESSID”;
3、session.cookie_lifetime:这个代表SessionID在客户端Cookie储存的时间,默认是0,代表浏览器一关闭SessionID就作废……就是因为这个所以Session不能永久使用!
4、session.gc_maxlifetime:这个是Session数据在服务器端储存的时间,如果超过这个时间,那么Session数据就自动删除!
因此,此时应修改session.gc_maxlifetime的值,比如90分钟,将其session.gc_maxlifetime=60*90
二、php的session多级目录存放解决大量临时文件效率问题
1、问题
当一个目录下有很多文件时,服务器的处理性能会变低,php默认的session仅仅存放在/var/lib/php5目录下,未进行分级,当有一定的访问量时,就存在性能问题了。
2、解决方法
session多级存放可以缓解一个目录下session文件过多带来的读写效率问题。
session.save_path string 设置创建session临时文件的路径。默认为 /tmp,咱们的服务器是存放在/var/lib/php5下。参见 session_save_path()。
此指令还有一个可选的 N 参数来决定会话文件分布的目录深度。例如,设定为 '5;/tmp' 将使创建的会话文件和路径类似于
/tmp/4/b/1/e/3 /sess_4b1e384ad74619bd212e236e52a5a174If
要使用 N 参数,必须在使用前先创建好这些目录。在 ext/session 目录下有个小的 shell 脚本名叫 mod_files.sh 可以用来做这件事。此外注意如果使用了 N 参数并且 N 大于 0,那么将不会执行自动垃圾回收,更多信息见 php.ini。
另外如果用了 N 参数,要确保将 session.save_path 的值用双引号 “quotes” 括起来,因为分隔符分号( ;)在 php.ini 中也是注释符号。
参考以上说明,在定义session.save_path中可以定义多级存放的路径,于是我们可以修改php.ini中的session.save_path为:
session.save_path = “2;/var/lib/php5”
一般情况下2级目录就够了,就能够处理相当大的访问量了
如此将session文件分成两级存放,即类似于
/var/lib/php5/4/b/sess_4b1e384ad74619bd212e236e52a5a174If
取session的前两位字符作为二级目录索引,但是php并不生成目录,需要自己手工生成,这里提供一个php脚本来生成初始的目录。
$string = '0123456789abcdefghijklmnopqrstuvwxyz';
$length = strlen($string);
function makeDir($param){
if(!file_exists($param)) {
echo "mkdir ".$param."\n";
// exec("mkdir ".$param);
mkdir($param,0777);
}
}
for($i = 0; $i < $length; $i++) {
makeDir('/var/lib/php5/'.$string[$i]);
for($j = 0; $j < $length; $j++) {
makeDir('/var/lib/php5/'.$string[$i].'/'.$string[$j]);
}
}
session目录分级处理之后,IO处理值增加,http进程降低,web处理效率明显好转