從PHP了解cookie/session原理

從PHP了解cookie/session原理

更新於 發佈於 閱讀時間約 3 分鐘
raw-image

如上圖程式碼,session_start();
其實就是在client端建立unique id的cookie。

如下圖,http response header中會夾帶Set-Cookie。

raw-image

如下圖,可以從開發者工具清楚看到cookie被設定上去!
key是 PHPSESSID, value則是不重複的session id.

raw-image

此外會在server disk建立這個session id的檔案,裡面則是放我們設定的key value,由於每個http request瀏覽器都會在header放入cookie, 因此這個session id會被帶到server, 一旦server比對發現有這個session id的檔案時,就能取出指定的key value值了! 所以其實我們可以自己實作session呢! 不一定要用php提供的!

不過如果user把瀏覽器的cookie功能關掉,就會造成每次的http request都不會再帶cookie了,而且php中session_start(); 也會沒辦法建立cookie,因此session功能就會失效,因為cookie被關掉了!


接著我重新整理一下網頁,request/response header如下:

raw-image

可以發現response header中已經沒有Set-Cookie了,因為已經有設定了!

raw-image

由於第一次網頁load後已經有設定cookie了,所以往後每次的request header都會帶上Cookie。


#note 如何避免session id被挾持?

1. 設定cookie HttpOnly:

一般我們會設定cookie為HttpOnly(php server可以設定),也就是設定不能透過javascript來存取cookie,這是為了避免被XSS攻擊,攻擊者可以透過javascript來拿到cookie,因此就會被拿到session id,這是相當危險的!

所以網站防禦XSS攻擊是很重要的呢! 一旦有XSS漏洞,就有可能被偷走cookie中設定的session id!

2. 關閉phpinfo頁面

phpinfo裡面包含了cookie資訊,如果沒有關閉這個頁面,就會給駭客有機會拿到cookie!

3.改為https

https也可以達到防禦的效果,傳輸過程中都透過SSL加密,是很難被竊取資料的!

avatar-img
Vic Lin的沙龍
21會員
161內容數
留言
avatar-img
留言分享你的想法!
Vic Lin的沙龍 的其他內容
父元件 傳遞方法使用@ <template>    ...    <Login @modalClose="modalClose"/> ... </template> <script setup>     const _modal = ref();     function m
前情提要 由於我的筆電已經用了10年,無法再戰下去了,且有預算考量,加上使用電腦幾乎都是定點,只有偶爾回家的時候會需要攜帶,因此最終選擇了迷你電腦,體積小不占空間,又方便攜帶,剛好符合我的需求。 菜單 由於這台無法裝獨顯,所以CPU的部分選擇 AMD R5 3400G(含Vega 11內
Nuxt3中可使用useFetch來獲取數據,不須再引用axios,相當方便: 本筆記參考: https://juejin.cn/post/7104071421160063012 https://juejin.cn/post/7086472647575339045
父元件 傳遞方法使用@ <template>    ...    <Login @modalClose="modalClose"/> ... </template> <script setup>     const _modal = ref();     function m
前情提要 由於我的筆電已經用了10年,無法再戰下去了,且有預算考量,加上使用電腦幾乎都是定點,只有偶爾回家的時候會需要攜帶,因此最終選擇了迷你電腦,體積小不占空間,又方便攜帶,剛好符合我的需求。 菜單 由於這台無法裝獨顯,所以CPU的部分選擇 AMD R5 3400G(含Vega 11內
Nuxt3中可使用useFetch來獲取數據,不須再引用axios,相當方便: 本筆記參考: https://juejin.cn/post/7104071421160063012 https://juejin.cn/post/7086472647575339045