首页 > 代码库 > 12-4-会话技术
12-4-会话技术
B/S请求是无状态无记忆的,任意间的请求之间不存在任何的联系,不能将请求保持下去!所以才需要会话技术把各网页文件联系起来。会话技术有cookie、session。
cookie
cookie访问时留一些数据在用户的浏览器端,当需要使用这些数据的时候便从浏览器调用,这样每个网页间就能通过这些数据联系起来。
cookie不那么安全,因为数据存在浏览器端,用户可以修改。
setCookie(‘名’,值,有效期,有效路径,有效域,是否仅安全传输)
改:直接命名相同,值不同。
删:值为 ‘ ’ (空)。
查:$_COOKIE 超全局数组变量来调用和查询
$_COOKIE[‘名’]
关于有效期:cookie的有效期默认为会话结束时,设置的有效期为时间戳,所以定义时要用time()+有效期秒数。当有效期设置为time()-1时,为标准的删除cookie的方法。也可以使用PHP_INT_MAX定义有效期为永久(2038年)
关于有效路径:指定cookie的有效脚本范围,生效范围为指定的目录及子目录有效,父目录无效。业务中设置为’/’ 使整站有效。
关于有效域:cookie的有效域是基于域名来保存的,默认为当前站点有效。
所以为了让各子域间能共用cookie,需要设置有效域为一级域名
关于安全传输:分为true和false。true时传输时通过ssi加密的仅安全传输,默认值为
false。
关于仅httponly:cookie本质为数据,所以可以被其他脚本处理,设置该项可以让cookie
只能被php处理。同样分为仅httponly的true和默认值false。
cookie的值只支持字符串类型。不能设置数字,其它类型会被转化为字符类型。
session
跟cookie类似,但是数据存储在服务器端,更安全。
当用户访问服务器时,服务器会开辟一个会话数据区存储数据,再给这段数据命名并返回一个ID给浏览器,再下次访问时,服务器通过识别不同的ID来调用数据。
业务需求把session的开启设置为单独的脚本文件中而不是所有脚本。
开启函数为:session_start()
session的数据操作通过 $_COOKIE这个预定义超全局数组变量来完成。
在开启session_start之前进行属性设置
session_set_cookie_params()
业务需要使设置一般为:session_set_cookie_params(有效期秒数,’/’,’一级域名’)
session数据类型可以是任意类型(通过序列化再存储)
$_SESSION下标仅支持字符串,不支持索引
删除其中一个:unset($_SESSION[‘下标’])
清空:$_SESSION = array()
销毁:session_destroy()
|
cookie |
session |
存储位置 |
浏览器 |
服务器 |
浏览器携带的数据量 |
多 |
少(只携带session-id) |
安全性 |
较低 |
较高 |
存储数据的类型 |
只支持字符串 |
任意类型 |
数据的传输量 |
有限制,4k |
无限制 |
默认的有效路径 |
当前目录及其子目录 |
整站有效 |
12-4-会话技术