标签:
1 session.gc_probability =1 2 session.gc_divisor =100 3 session.gc_maxlifetime =1440
客户端的Cookie的过期机制:失效了浏览器自然发送不了cookie到服务器,这时即使服务器的Session文件存在也没用,因为PHP不知道要读 取哪个Session文件。我们知道PHP的Cookie过期时间是在创建时设置的,那么PHP在创建session的同时为客户端创建的cookie的 生周期是多久?这个在php.ini中有设置:session.cookie_lifetime 。这个值默认是0,代表浏览器一关闭SESSIONID 就失效。那就是说我们把session.gc_maxlifetime和session.cookie_lifetime设置成同一个值就可以控制 Session的失效时间了
1 if (isset($_COOKIE[session_name()])) { 2 setcookie(session_name(),‘‘,time() -40000,‘/‘); // session cookie过期 3 } 4 session_regenerate_id(); //这一步会生成新的session_id,再调用session_id()返回的是新的值
1:session在大访问量网站上确实影响系统性能,影响性能的原因之一由文件系统设计造成,在同一个目录下超过10000个文件时,文件的 定位将非常耗时,PHP支持Session目录hash,我们可以通过修改php.ini中session.save_path = “2;/path/to/session/dir”,那么session将存储在两级子目录中,每个目录有16个子目录[0~f],PHP session不支持创建目录,需要事先把那么些目录创建好 。
2:小文件的效率问题,一般我们的Session数据都不会太大(1~2K),如果有大量这样1~2K的文件在磁盘上,IO效率很差,PHP手册上建议使用Reiserfs文件系统。
同步问题:
1:使用数据库保存session, 使用数据库来保存session,就算服务器宕机了也没事,session照样在。问题:程序需要定制;每次请求都进行数据库读写开销不小(使用内存数据 库可以提高性能,宕机就会丢失数据。可供选择的内存数据库有BerkeleyDB,Mysql的内存表);另外数据库是一个单点,可以做数据库的ha来解 决这个问题。
2:使用memcached来保存session, 这种方式跟数据库类似,不过因为是内存存取的,性能自然要比数据库好多了。问题:程序需要定制,增加 了工作量;存入memcached中的数据都需要序列化,效率较低;如果是文件形式的,你可以用NFS统一存储。
3:还有一种方式是通过加密的cookie来实现,用户在A服务器上登录成功,在用户的浏览器上添加一个加密的cookie,当用户访问B服务器时,检查 有无Session,如果有当然没问题,如果没有,就去检验Cookie是否有效,Cookie有效的话就在B服务器上重建session。简单,高效。 问题:session中数据不能太多
标签:
原文地址:http://www.cnblogs.com/zyf-zhaoyafei/p/4477175.html