仍是那句。。。。新手上路。。大神歡迎指點數據庫
其實什麼是session?什麼是cookie?這些都是些老掉牙的問題了。。而作過相關的開發的人,基本都知道。。而還不是很理解的,谷歌下,要理解這兩個東西其實也不難。。那這裏我就不去探討這個問題了。。瀏覽器
說下個人理解吧:緩存
cookie和session的方案雖然分別屬於客戶端和服務端,可是服務端的session的實現對客戶端的cookie有依賴關係的;步驟大概以下:服務器
注意:session保存信息的手段是多種的:緩存,數據庫,文件等;可是默認是文件形式保存。。。cookie
問題:session
爲了探討上面的問題。。咱們先看看 session 建立和銷燬的時機。。app
1)使用jsessionid。該值若能與現有的session對應,就不建立新的session,不然,仍然建立新的session。code
2)使用cookie。該值若能與現有的session對應,也不建立新的session;但若沒有session與之對應(就如上面的重啓服務器以後)容器會根據cookie信息恢復這個與之對應的session,就好像是之前有過同樣。對象
建立一個session:內存
//啓動session的初始化 session_start(); //註冊session變量,而且賦值 $_SESSION["username"] = "hello" //輸出生成的session_id echo session_id();
訪問頁面建立session,獲取session_id,關閉瀏覽器;
根據session_id建立session對象
//上面輸出的session_id $session_id = "qpk6onnn3husvotnke030ftcm4"; session_id($session_id); session_start(); echo $_SESSION["username"];
結果能夠取出 "hello"
由此能夠看出:
當瀏覽器關閉時,原session並無被銷燬(destory方法沒有執行),而是等到timeout到期,才銷燬這個session。關閉瀏覽器只是在客戶端的內存中清除了與原會話相關的cookie,再次打開瀏覽器進行鏈接時,瀏覽器沒法發送cookie信息,因此服務器會認爲是一個新的會話。所以,若是有某些與session關聯的資源想在關閉瀏覽器時就進行清理(如臨時文件等),那麼應該發送特定的請求到服務器端,而不是等到session的自動清理。
其實個人理解很簡單(不對的地方歡迎指出)。。
只要有session_id就能夠找到session。。。
cookie 是保存惟一識別(session_id)的手段;
禁用cookie 或者 原本就不支持cookie,可是經過其餘手段,也能實現cookie實現的功能。服務器只要有session_id;仍是能找到對應的session的;只是session機制,內部原本是經過cookie自動實現的。。。若是不採起cookie的話,就要本身去邏輯實現。。。感受有點變味了,可是豬肉變質了,仍是豬肉啊。。。具體看本身怎麼看。。。