1.1 session的定义
Session是服务端的会话机制,简单理解就是服务端给客户端的一个编号。是指一个终端用户与交互系统进行通信的时间间隔,通常指从登录进入系统到注销退出系统之间所经过的时间。Session不能跨服务器,以文本文件形式存储在服务器端。一般文件形式:
sess_9ii4e9v1np8nh32uuguo8rkkk6
sess_r6q2ls11ajh1me05p07451egb5
1.2 session的工作原理
a.当session被第一次使用时,一个唯一的标识就会被保存在cookie中,生成唯一的一个SESSION ID 在程序中输出$_COOKIE时可发现$_COOKIE [PHPSESSID];
b. 在PHP中使用session_start函数,从session仓库中加载存储的session变量。注意:session_start()前面不能有输出。
c. 执行PHP脚本时,通过session_register()函数注册session变量。(赋值)
d. PHP脚本执行结束时,未被注销的session变量会被保存在指定的session库中,session库路径可以通过
session_save_path函数进行修改。
1.3 session的使用
Session储存用户会话过程中的状态信息,通常被用来保存用户的登录信息,由于session是保存在服务器端的会话,PHP自动修改session文件的读写权限,只有系统的读和写权限,并且不能通过FTP修改,session值没有长度限制,相对安全。
1.3.1 session的有效时间
Session是全局变量,只要页面有提交活动,session会话就会被保持,如果页面在session有效时间内无活动,则会整体失效。一般情况下,关闭浏览器,session会话自动失效。
在PHP中,Session的有效时间可以通过多种方法进行设置:
//session过期时间设置
@ini_set('session.cookie_lifetime', 3600);
@ini_set('session.gc_maxlifetime', 3600);
//session过期时间设置
Setcookie(session_name(),session_id(),time()+$lifeTime,”/”,’域’)
1.3.2 Session的路径设置问题
Session的默认保存路径是在临时文件夹里,对于虚拟主机来说,除了维护困难,也存在一定的安全性问题,一般情况下建议将session路径指向web方式不能访问的具有读写权限的文件夹里。设置session存放目录设置方法:
//session缓存路径
@session_save_path(PATH_DATA.'/session');
session文件并不会自动删除,会一直保存在文件夹中,时间长了,占据大量空间,因此开发者最好进行定期删除,或者编写程序指令定期删除过期的session文件。
1.3.2 session的注销
注销所有session
session_unset();
session_destroy();
注销单个session变量
unset($_SESSION[''user_name]);
1.4 session的缺点
Session保存在服务端虽然相对安全,但是比较消耗服务器内存,当用户登录量越来越多,每个用户都会生成一个唯一的session对象,每个session对象的持续时间是用户访问时间+不活动时间。例如用户访问web应用程序1个小时,session有效时间是1小时,则一个session对象的持续时间是2个小时。如果session中保存了很多对象,这些用户又同时访问web应用程序,那么用于session的持久性的服务器内存就会很大,从而影响可伸缩性。因此在大数据访问量情况下,服务器性能就要相对的提高。
1.5 session的PHP使用解说
在需要判断登陆的页面添加session判断:
if($_SESSION['aid']){...........}