这两天初步看了下cookie和session的用法,就个人理解,总结如下:
总结这些之前,先说下一次会话的概念,一次会话可以简单的认为是一个进程,也就是打开一个浏览器,只要不点那个×,都是一次会话,包括在浏览器的后面新建选项卡。关闭浏览器,一次会话结束。
cookie:
存在于用户端,即谁用就存在谁的电脑上,确切的说是浏览器的缓存存放位置。语法如下:
设置cookie
setcookie(‘名称’,’值’,time()+时间秒数);因为后面的两个参数不常用,所以就不写了。
使用cookie
$_COOKIE[‘cookie名称’];
删除cookie
setcookie(‘名称’,’值’,time()-时间秒数);
举例说明:
设置cookie:setcookie(‘username’,’酱油’,time()+3600)设置用户名为酱油的cookie值,3600秒后过期
访问cookie:echo $_COOKIE[‘username’]; //输出酱油
删除cookie:setcookie(‘username’,’’,time()-1); //此时已经将这个值删除了
注意事项:
①创建一个cookie的时候都会产生一个相应的文件,删除时会讲文件也一并删除
②cookie的有效期其实是从设置的时间开始的,到设定时间结束,如果在一次会话中还访问了其他的文件,对cookie的结束时间不会有改变
session:
存在于服务器端,用户一般无权限操作,由系统管理员来管理,语法如下:
设置、使用session:
$_SESSION[‘session名称’];
删除session:
unset($_SESSION[‘session名称’]); //指定删除
session_destroy(); //删除一次会话中的所有session
注意事项:
①session的垃圾回收机制是在执行session_start()才会启用(是在读操作之后执行),但是启用垃圾回收机制又与三个参数有关,分别是session.gc_maxlifetime(默认1440)、session.gc_probability(默认是1)、session.gc_divisor = 1000(默认是1000),启用垃圾回收机制的原则是如果这个session的生存周期已经结束,文件就成为了垃圾,每次触发这个机制的概率是ession.gc_probability/session.gc_divisor,一旦触发,将会对所有的session垃圾文件进行回收处理。
②要使用session,要先设置session_start()
③通过session来请求浏览器的时候,服务器会给浏览器返回set_cookie的值,这个值一般是以PHPSSID来标识
session和cookie的对比
①cookie只能存放字符串类型数据,session通吃,不过要注意在存对象类型的时候存在序列化的问题
②cookie的设置只能通过setcookie(),而session是用$_SESSION[]
③其实session是基于cookie的
session的注意事项:
session_start()的时候做了两个工作,一个是先判断浏览器是否携带session-ID,生成session文件或者找到session-ID的文件,这个时候会从session数据区(默认的是文件)读取session的数据,然后对数据的进行反序列化的操作,将反序列化后的结果给$_SESSION变量,即完成了对$_SESSION的初始化。
脚本运行周期中,对$_SESSION的操作只是对$_SESSION的操作,不会和数据区的文件进行交互。
脚本运行结束的时候,才会将session数据序列化后写入到session数据区(默认文件中)。即一次脚本周期,只会对文件进行一次读或者写操作。但是也有例外,如果使用了session_destroy(),那么在脚本结束的时候不会再向文件中写入数据。
完全删除session
首先session_destroy(); //删除文件,但是不会删除$_SESSION数据
然后unset($_SESSION)或者$_SESSION = array() //一般使用的是置为空数组
最后setcookie(session_name(),’’,time()-1); //删除浏览器中所存放的cookie数据