会话技术详解
发布时间-04-来源:青锋建站作者:青锋建站
PHP中的会话支持是在并发访问时由一个方法来保存某些数据,被广泛用于保持会话状态,存储会话变量。以下是青锋建站给大家分享的有关技术的详解,包括的基本概念和原理、的配置方法、使用完成登录、回收机制、销毁、安全退出的实现。
Session的基本概念和原理
session的概念
php中Session是会话的意思,也代表浏览器和服务器之间的信息交流。Session和cookie一样能够区分浏览器(用户)的数据技术。
phpSession在cookie的基础上加强了以下几点
1、可以存储更大的数据量;
2、可以存储更多的数据类型;
3、数据存储在服务器端,更安全;
Session和cookie如何区分用户和保持同步
Session数据为了区分不同用户(浏览器),其依赖于一个特殊的cookie:
Cookie名:PHPSESSID
Cookie值:由系统分配的随机的不重复的字符串
php中Session与cookie的设置相同部分
有效周期:默认是浏览器窗口生存周期-即关闭浏览器就结束了。
有效路径:全站有效
有效域名:当前域名有效
是否仅仅https协议下有效false
是否仅仅http协议下有效false
PHP中Session的细节配置
Session在php.ini文件中配置
Session.cookie_lifetime=0;
//当前会话周期,可以设置为3600表示一小时有效,以秒为单位。
以最后一次使用为准,中间停留这个时间单位后停止。
Session.cookie_path=/;
//整站根目录
Session.cookie_domain=
没有值,表示当前站点
Session.cookie_secure=
没有值,默认表示false
Session.cookie_httponly
没有值,默认是false
Session在PHP脚本中进行配置
Ini_set(Session.cookie_lifetime,超时秒数);0表示会话周期
注意:这里的超时时间,不是再是设置cookie时的写法,(time()+秒数),而是直接写秒数!!!
Ini_set(Session.cookie_path,/);
Ini_set(Session.cookie_domain,www.bac.com);
Ini_set(Session.cookie_secure,false);
Ini_set(Session.cookie_httponly,false);
当前设置项就只在当前文件中有效,有一个函数,可以进行一次性综合设置:
Session_set_cookie_params(超时秒数,路径,域名,https,httponly)。
使用:
Session_set_cookie_params(3600,/,,false,false);
注意:这里并没有设置session标志的cookie名和其对应cookie值,因为该cookie的名(PHPSESSID)和其值,是由系统给定的。不过,在PHP.INI中,我们的确可以修改session标志的名字。
Session回收机制
什么是session回收
当一个用户进行一个网站进行一系列的session操作,就会记录相应的session数据。
通常用户做完了某些事情后,就直接关闭浏览器,此时,服务器端,就无从知道。这些存储在服务器端的session数据就成为了垃圾。我们应该有一个机制,在适合的时候删除这些垃圾。
PHP中的session垃圾回收机制
最大回收时间(即超时时间):
Session.gc_maxlifetime=超时时间;//默认是1440,即24分钟。
回收的概率分子:
Session.gc.probability=1;//
回收的概率分母:
Session.gc_divisor=1000;
上述三个设置项,可以在PHP.INI文件中配置,也可以在脚本文件中使用init_set进行设置。
回收机制的过程
在设置的超时秒数后,如果有一个请求,就会按设定的概率将该session数据删除。
销毁session数据
1、删除单个session:unset($_SESSION[名]);
2、删除所有session数据:$_SESSION=array();就是赋值为空数组;
注意:不可以这样删除:unset($_SESSION);
销毁session:关闭session机制并删除当前session的数据区及文件
执行session_destory();
执行session_destory()的作用:
session机制不再起作用(即关闭session,其后启动session的相反过程);
删除session文件对应的文件数据;
注意:只是删除当前执行程序的用户(浏览器)的session,并不影响其他使用session的用户。因此其常用场景就是退出。