前言
一個女人讓他的程序員丈夫去商店買東西:你去附近的商店買些面包,如果有雞蛋的話,買6個回來,這個丈夫買了6個面包回來,他的妻子大吃一驚:你為什么買了6個面包?! 程序員丈夫回答:因為他們有雞蛋。
內容
Session是存放在服務端的,當用戶發送請求,session存放機制是下面這樣的:
- 第一步
用戶訪問的時候,會在服務器上開辟一塊空間(創建一個session,伴隨着一個sessionID)。
- 第二步
訪問完了就斷開連接(http協議連接后就斷開連接了),下次該用戶還進行重復的訪問,會通過服務器response給客戶端cookie的sessionid來進行再次連接。
- 第三步
當關閉窗口,cookies里面的東西就沒有了,再次打開就取不到相應的sessionID,服務器存的session內容超時后會自動清除。如果客戶端禁用了cookie,可以進行url重寫,就是將獲取到的sessionID跟蹤到url后面。
下面寫入和讀取session和cookie類似。
Session寫入:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(true); session.setAttribute("ip", request.getRemoteAddr()); session.setAttribute("zhoulitong", "very good!"); response.getWriter().println("SetSession OK!"); }
效果圖:
Session讀取:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(true); String ip = (String)session.getAttribute("ip"); String zhoulitong = (String)session.getAttribute("zhoulitong"); response.getWriter().println("ip=" + ip +","+ zhoulitong); }
效果圖:
如果清理cookies或者重啟瀏覽器會出現下面這種情況,說明cookie里面保存的sessionID找不到了,當然就不能根據sessionID獲取服務器的信息了。
小結
學習嘛,遠不比工作。
感謝您的寶貴時間···