会话控制技术
HTTP 协议是 WEB 服务器与浏览器相互通信的协议,它是一种无状态协议,即每个 HTTP 请求之间是相互独立的。因此,HTTP 协议没有一个内建的机制来维护两个事务之间的状态。比如,当一个用户在请求一个页面后再去请求另外一个页面时,HTTP 将无法告诉我们这两个请求是否来自同一个用户。
在网站中,我们经常需要跟踪一个变量:通过对变量的跟踪,使多个请求事物之间建立联系,再根据授权和用户身份显示不同的内容、不同页面。这就是会话控制技术。
常用的会话控制技术有 Cookie
和 Sessio
n。简单地说,Cookie
是通过在客户端中记录信息而确定用户身份;Session
是通过在服务器端记录信息而确定用户身份。
- Cookie
工作原理:
服务器通过在 HTTP 响应报文中设置一个 Set-Cookie 字段,并把 Cookie 数据放在 Set-Cookie 字段中随着 HTTP 报文传给浏览器;
浏览器在接收到 HTTP 响应报文后,检查到 Set-Cookie 字段有值,会在本地创建一个 Cookie 文件来保存数据;
当浏览器再次向该服务器发送请求时,浏览器会先搜索本地保存的 Cookie 文件,如果在 Cookie 文件中有任何与正在连接的 URL 相关的 Cookie,就在 HTTP 请求报文中设置一个 Cookie 字段,并把 Cookie 文件中的数据添加到该字段中,最后把携带 Cookie 字段的 HTTP 请求报文发送给服务器。
cookie的使用
创建cookie
setcookie($cookiename , $value, $expire, $save_path, $domain, $secure)
获取cookie
$_COOKIE[$cookiename]
销毁cookie
setcookie($cookiename, '', time()-3600) setcookie($cookiename,null)
session
工作原理:
当浏览器第一次访问 PHP 脚本时,seesion_start() 函数会创建一个唯一的 Session ID(每个客户端都有一个唯一的标识),并自动通过 HTTP 的响应头,将这个 Session ID 保存到客户端 Cookie 中。同时,也在服务器端创建一个以 Session ID 命名的文件,用于保存这个用户的会话信息;
当同一个用户再次访问这个网站时,会自动通过 HTTP 的请求头将 Cookie 中保存的 Seesion ID 再携带过来;
服务器 PHP 脚本接受到客户端请求,这时 session_start() 函数就不会再去分配一个新的 Session ID,而是在服务器的硬盘中去寻找和这个 Session ID 同名的 Session 文件,将这之前为这个用户保存的会话信息读出。
疑问:
浏览器禁用cookie后php如何保持session会话?
设置 php.ini 中的 session.use_trans_sid 设置为1
当浏览器禁用cookie的时候,如果访问的URL为相对URL,则自动在 url 后缀中包含sessionID
session 的保存路径
php.ini 中的 session.save_path
如何共享session (分布式服务器的情况下)
因为默认的是session 是以文件的形式保存的,在分布式服务器的情况下,可以采用 redis memcache 和数据库存储 。 参考 = 点我
实现自定义 session 会话机制?
通过session_set_save_handler实现自定义会话机制
使用
开启会话
session_start()
结束会话
session_destory()
扩展
- session 如何连接redis
本文由 邓尘锋 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: May 4, 2019 at 11:39 am