Session相关
Session相关知识点(笔记)
Session是什么
from: Session 是什麼
Session机制类似: 顾客在饮料店点单后获取号码牌, 号码牌上有你点饮料的相关信息, 根据号码牌向店员索取自己所点的饮料
让Client取得号码牌:
- 使用Cookie
- 直接輸出並嵌入頁面之中的方法(就是要你把號碼背起來)
拿號碼牌去 Server 要資料:
- 使用Cookie
- 運用標準的 Query string/POST body方法
(只要能把號碼傳到 Server 上,任何方法都行)
就算沒有 Cookie 的存在,Session 機制也可以正常運作(传递sessionid)
因为大多数浏览器实现了Cookie机制, 因此大多数网站预设采用Cookie发号码牌和兑换资料, 建立连接时把Cookie上传到Server, Server传回资料时带上Cookie
不使用Cookie实现session
通过隐藏表单传递sessionid - Hidden Form Fields
1 | <input type = "hidden" name = "sessionid" value = "12345"> |
服务器发送含有sessionid的隐藏表单, 表单提交后该信息通过浏览器的GET/POST请求传递到服务器.
缺陷: 点击<a>
标签不会发送表单
使用URL重写传递sessionid - URL Rewriting
类似以下形式:
http://tutorialspoint.com/file.htm;sessionid=12345
缺陷:
- 无法共享URL(个人信息同时也被共享)
- 破坏缓存
- 第三方也能看到sessionid, 可能造成会话劫持, 不安全
- 额外服务器负荷
- 跳转其他站点/请求特定URL丢失信息
- 访问同一站点若不存在特定值会导致信息丢失
php中: session.use_trans_sid = 1
Cookie-based Session
这里的cookie, 指的是存储资料方式的不同, 不是指領號碼牌時, 是否有用到 cookie.
最原始session: 资料都存在server, 对于流量大的网站服务, 存在无数台server, 而client由哪个server提供服务是随机的, 因此不适合将资料放在server
cookie-based session 将资料暂存于cookie, client自己负责保存.
但是cookie 4kb size limit, 因此很多网站服务选择cookie-based与服务端存储并行.
这类cookie会被加密, 只有server能解, client无法存取, 因此安全性较高, 但还是有风险, 这也是采用并行存储的另一原因.
Session传值
利用session机制存储资料, 让不同页面间互传资料, 通常使用Query String或POST body等方法, 把资料往server传之后, 在server端将client上传的资料存在session中(?), 之后的连线后开启其他页面, 因为使用同一个号码牌(?), 所以在不同页面依然能读到前一次存储于session的状态. (?)
不理解 >>> url传值,cookie传值,session传值的笔记
PHP实现Session传值
Session通过为每个访问者创建一个独立的ID(UID)并储存基于UID的变量来运行。UID既存储在cookie中,又在URL中展现出来。
将用户信息存入PHP Session之前,必须先启动Session
1 | session_start(); |
存储Session变量
1 | session_start(); |
1 |
|
删除session
释放指定session变量:
1 |
|
将session全部删除:
1 |
|
参考
- Fred’s blog
- HTTP the definitive guide
- Session Tracking
- Beware of URL rewriting
- 3种 web 会话管理的方式