《php基础教学课件-12.会话控制.ppt》由会员分享,可在线阅读,更多相关《php基础教学课件-12.会话控制.ppt(20页珍藏版)》请在三一办公上搜索。
1、PHP会话控制,后盾网 2012-2013 v2.0,后盾网 人人做后盾,HTTP特性,无状态无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快;无状态性客户端与服务器端连接通信运行速度快,服务器应答也快。因为无状态,协议对事务处理是没有记忆性的是独立的。所以为了满足后面事务需要前面的事务有关信息,所以事务有关的信息要在协议外发送,COOKIE,Cookie最早是网景公司的前雇员Lou Montulli在1993年3月发明。Cookie是当用户浏览某网站时,服务器
2、存储在用户机器上的一个小文本文件,再次来到该网站时,网站通过读取Cookie,得知用户的相关信息,就可以做出相应的动作;Cookie传递Cookie是利用了网页代码中的HTTP头信息进行传递的,浏览器的每一次网页请求,都可以伴随Cookie传递。服务器将Cookie添加到网页的HTTP头信息中,伴随网页数据传回到用户的浏览器,浏览器会根据用户电脑中的Cookie设置选择是否保存这些数据。如果浏览器不允许Cookie保存,则关掉浏览器后,这些数据就消失;,COOKIE,生命周期Cookie有一个Expires(有效期)属性,这个属性决定了Cookie的保存时间,服务器可以通过设定Expires字
3、段的数值,来改变Cookie的保存时间如果不设置该属性,或设为0,那么Cookie只在浏览网页期间有效,关闭浏览器,这些Cookie自动消失,COOKIE,浏览器处理Cookie方式数量各个浏览器中会不同,同一浏览器版本也不同IE8允许每个域保存50个cookieFirefox允许每个域保存50个cookie大小:一般来说允许4Kb,不同浏览器,不同版本略有不同当Cookie的数量达到上限时的删除方式1:将最近使用最少的Cookie删除2:随机删除,生成COOKIE,setcookie(string name,string value,int expire,string path,string
4、 domain,bool secure)name Cookie 的名字value Cookie 的值 expire Cookie 过期的时间 path Cookie 在服务器端的有效路径 domain 该 cookie 有效的域名 secure 指明 cookie 是否仅通过安全的 HTTPS 连接传送。当设成 TRUE 时,cookie 仅在安全的连接中被设置。默认值为 FALSE;第七个参数设为true后,只能通过http访问,javascript无法访问,COOKIE数组或对象,操作数组$_COOKIEa=111;$_COOKIEb=222;$_COOKIE1=111;$_COOKIE2
5、=666;操作对象通过序列化实现serialize()string serialize(mixed$value)产生一个可存储的值的表示unserialize()mixed unserialize(string$str,string$callback)从已存储的表示中创建 PHP 的值,SESSION,Session从用户访问页面开始,到断开与网站连接为止,形成一个会话的生命周期。在会话期间,分配客户唯一的一个SessionID,用来标识当前用户,与其他用户进行区分;Session会话时,SessionID会分别保存在客户端和服务器端两个位置,对于客户端使用临时的Cookie保存(Cookie
6、名称为PHPSESSID)或者通过URL字符串传递,服务器端也以文本文件形式保存在指定的Session目录中;Session通过ID接受每一个访问请求,从而识别当前用户、跟踪和保持用户具体资料,以及Session变量(在Session活动期间,可在Session中存储数字或文字资料),比如session_name等等,这些变量信息保存在服务器端,SESSION,session_start()开始一个会话或者返回已经存在的会话,判断客户端有无session_id,如果没有,在服务器端写入SESSION文件(或者通过数据库等完成)发送写session_id的cookie头信息。如果有客户端发来的s
7、ession_id则找相应session数据session使用方法同get post等使用方法相同,$_SESSIONvar即可使用更改session_id()session_regenerate_id()更改成功则返回true,失败则返回false。更改session_id,但不改变当前session的其他信息session_name()返回当前session的name或改变当前session的name,SESSION传递方式,通过COOKIE传递通过URL地址栏传递 定义普通GET变量定义session_nameSID常量等于 isset($_COOKIEsession_name()?de
8、fine(cc,):define(cc,session_name().=.session_id()隐藏表单域设置php.ini中的session.use_trans_sid=1或者编译时打开打开了-enable-trans-sid选项,让PHP自动跨页传递session id如果在session_start();之前加代码session_id($sessionid);将不产生新的session文件,直接读取与这个id对应的session文件,清除SESSION,unset($_SESSIONweb)/删除session变量$_SESSION=array()/删除所有session变量,不删除s
9、ession文件session_unset()/释放当前在内存中已经创建的所有$_SESSION变量,但不删除session文件以及不释放对应的session idsession_destroy()/删除当前用户对应的session文件以及释放session id,内存中的$_SESSION变量内容依然保留释放用户的 session 所有资源session_unset()session_destroy(),配置文件设置SESSION环境,session_save_path会话数据的路径。如果指定的路径,将数据保存到路径中;session.name=PHPSESSID用在cookie里的会话ID
10、标识名,只能包含字母和数字,配置文件设置SESSION环境,session.use_cookies=On是否使用cookie在客户端保存会话IDsession.use_only_cookies=Off是否仅仅使用cookie在客户端保存会话ID。PHP6的默认值为Onsession.cookie_lifetime=0传递会话ID的Cookie有效期(秒),0 表示仅在浏览器打开期间有效session.cookie_path=/传递会话ID的Cookie作用路径,配置文件设置SESSION环境,session.cookie_domain=传递会话ID的Cookie作用域。默认为空表示根据cook
11、ie规范生成的主机名session.cookie_secure=Off是否仅通过安全连接(https)发送cookiesession.cookie_httponly=Off是否在cookie中添加httpOnly标志(仅允许HTTP协议访问),这将导致客户端脚本(JavaScript等)无法访问该cookiesession.use_trans_sid=Off是否使用明码在URL中显示SID(会话ID)。默认是禁止的,因为它会给你的用户带来安全危险,配置文件设置SESSION环境,session.save_path=/tmp传递给存储处理器的参数。你可以使用N;MODE;/path这样模式定义该
12、路径(N是一个整数)。N表示使用N层深度的子目录,而不是将所有数据文件都保存在一个目录下。MODE;可选,必须使用8进制数,默认600,表示文件的访问权限session.name=PHPSESSID用在cookie里的会话ID标识名,只能包含字母和数字session.auto_start=Off在客户访问任何页面时都自动初始化会话,默认禁止。因为类定义必须在会话启动之前被载入,所以若打开这个选项,你就不能在会话中存放对象,配置文件设置SESSION环境,session.serialize_handler=php用来序列化/解序列化数据的处理器,php是标准序列化/解序列化处理器。session
13、.gc_probability=1session.gc_divisor=100定义在每次初始化会话时,启动垃圾回收程序的概率。这个收集概率计算公式如下:session.gc_probability/session.gc_divisor;对会话页面访问越频繁,概率就应当越小。建议值为1/10005000,配置文件设置SESSION环境,session.gc_maxlifetime=1440超过此参数所指的秒数后,保存的数据将被视为垃圾并由垃圾回收程序清理。判断标准是最后访问数据的时间(对于FAT文件系统是最后刷新数据的时间)。如果多个脚本共享同一个session.save_path目录但sess
14、ion.gc_maxlifetime不同,那么将以所有session.gc_maxlifetime指令中的最小值为准。如果使用多层子目录来存储数据文件,垃圾回收程序不会自动启动。你必须使用一个你自己编写的shell脚本、cron项或者其他办法来执行垃圾搜集;,PHP垃圾回收机制,什么是垃圾没有任何变量指向这个对象时,即为垃圾。PHP会自动从内存中将其销毁,防止内存溢出。当一个PHP线程结束时,当前所有占用的内存都会被销毁_destruct()析构函数,在垃圾对象被回收时执行引用计数器每个对象都包含一个引用计数器,每个引用连接对象时,计数器+1。当引用离开生存空间或设为NULL时,计数器减1。当
15、某个对象计数器为0时,启动垃圾回收器,释放其所占用的空间,PHP垃圾回收机制,$a=100;在内容中开辟空间保存100。用PHP内部符号表的$a指向内存地址,方便依据符号操作内存;unset()即断开符号表与内容地址的关系。将计数器-1;NULL即直接将内容引用计数器清为0;,SESSION的垃圾回收机制,PHP的工作机制它并没有一个daemon线程来定期的扫描Session信息并判断其是否失效,当一个有效的请求发生时,PHP 会根据全局变量 session.gc_probability和session.gc_divisor的值,来决定是否启用一个GC启动GC的时机在默认情况下,session.gc_probability=1,session.gc_divisor=100也就是说有1%的可能性启动GC(也就是说100个请求中只有一个gc会伴随100个中的某个请求而启动);工作原理GC的工作就是扫描所有的Session信息,用当前时间减去session最后修改的时间,同session.gc_maxlifetime参数进行比较,如果生存时间超过gc_maxlifetime(默认24分钟),就将该session删除;,