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