web與網路http/tcp/ip
http:基於請求,響應的無狀態的協議
http無狀態性與tcp短連結:一次tcp連線,只有一個http請求和一個http響應
http無狀態性與tcp長連結:一次tcp連線,有多個http請求和多個http響應、
--------------------------------------------------------------------------------------------------
http的無狀態?
建立連線/關閉連線,http協議沒有一個內建機制來維護兩個請求之間的狀態,會話控制允許web伺服器跟蹤同一個瀏覽器使用者的連續請求,實現記錄使用者的狀態
如何解決http的無狀態?
如何實時的記錄該瀏覽器使用者傳送的連續的請求呢?
1)利用隱藏域
2)利用url字串進行引數傳遞
均有瀏覽器傳送的sessionid給伺服器,伺服器通過sessionid查使用者的狀態
【服務端語言呢,都是用來做http響應的,因此哦,響應頭啦,就是作為服務端開發的人要關心的哦】
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------http請求(瀏覽器):
1)起始行:請求方法/請求資源/http版本
2)請求頭:瀏覽器客戶端資訊
3)空行
4)正文
http響應(伺服器):
1)起始行:http版本/響應碼/響應訊息
2)響應頭:服務端資訊,設定http cookie,
3)空行
4)正文:html文件
-----------------------------------------------------------------------
如何解決http的無狀態?通過會話控制
1cookie:儲存在客戶端(記憶體/磁碟)
2session:儲存在伺服器端
========================================================================
cookie
1工作原理
客戶端第一次通過http請求訪問伺服器,伺服器觀察到客戶第一次訪問,伺服器在響應時在響應頭為其響應一個cookie,
客戶以後在通過http請求訪問伺服器時,會攜帶對應的cookie。,伺服器根據客戶端傳來的cookie區分使用者,
cookie在伺服器的響應頭中設定
服務端響應cookie的內容:
set-cookie
name:設定cookie的名稱
value:設定cookie的值,通過$_COOKIE['name'],
expire:設定cookie的失效日期(會話cookie和持久cookie)
path:指定cookie在web伺服器的儲存路徑
domain:cookie允許的域名
secure:hhtp/https
2cookie的分類
會話cookie:由session取代,存到快取中(記憶體的瀏覽器程序儲存)(expire=0)
持久cookie:會將資料儲存到磁碟(文字資訊儲存)中(設定了expire)
3php中cookie的使用
setcookie()/setrawcookie()函式/header()來為客戶端設定cookie
這種函式需要在其他資訊被輸出到瀏覽器前呼叫(http正文),因為設定cookie是作為伺服器響應時在http響應頭中的(http響應頭)
刪除cookie:將cookie失效,unset($_cookie['key'])--------瀏覽器自動刪除
訪問cookie$_COOKIE[]
isset($_COOKIE['key']):用來判斷key的cookie是否存在