JavaWeb詳細講述Cookie和Session的概念
1.會話
會話: 用戶打開瞭一個瀏覽器,點擊瞭很多超鏈接,訪問多個web次元,關閉瀏覽器,這個過程可以稱之為會話
有狀態會話: 帶有訪問記錄的會話
1.服務端會給客戶端一個cookie,客戶端下次訪問時攜帶cookie訪問就可以瞭 cookie
2.服務端登記客戶端訪問過,下次訪問時匹配到客戶端; session
2.保存會話的兩種技術
- cookie
客戶端技術(響應,請求)
- session
服務器技術,利用這個技術,可以保存用戶的會話信息,可以把信息或者數據保存在Session中。
常見場景:網站登錄之後,下次不用再登錄瞭,第二次訪問直接就上去瞭!
3.Cookie
1.從請求中拿到cookie信息
2.服務器響應給客戶端cookie
cookie相關方法:
Cookie[] cookies = req.getCookies(); //獲得cookie cookie.getName() //獲得cookie中的鍵 cookie.getValue() //獲得cookie中的值 new Cookie("LastLoginTime",System.currentTimeMillis()+"") //新建一個cookie cookie.setMaxAge(24*60*60); //設置cookie有效期 resp.addCookie(cookie); //響應給客戶端一個cookie
案例:
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //解決中文亂碼 req.setCharacterEncoding("utf-8"); resp.setCharacterEncoding("utf-8"); resp.setContentType("text/html; charset=utf-8"); PrintWriter out = resp.getWriter(); Cookie[] cookies = req.getCookies(); //判斷cookie是否存在 if(cookies == null){ out.println("第一次訪問網站"); }else{ out.write("您上一次訪問的時間是:"); for (Cookie cookie : cookies) { if("LastLoginTime".equals(cookie.getName())){ //獲取cookie中的值 long time = Long.parseLong(cookie.getValue()); Date date = new Date(time); DateFormat dfd = DateFormat.getDateInstance(DateFormat.MEDIUM,Locale.CHINA); DateFormat dft = DateFormat.getTimeInstance(DateFormat.MEDIUM, Locale.CHINA); out.write(dfd.format(date)+dft.format(date)); } } } Cookie cookie = new Cookie("LastLoginTime",System.currentTimeMillis()+""); //設置cookie有效期為一天 cookie.setMaxAge(24*60*60); resp.addCookie(cookie); }
cookie:一般會保存在本地的用戶目錄下appdate;
一個網站cookie是否存在上限?
- 一個cookie隻能保存一個信息;
- 一個web網站可以給瀏覽器發送多個cookie,最多存放20個cookie;
- cookie大小有限制4kb
- 300個cookie瀏覽器上限
刪除cookie:
- 不設置有效期,關閉瀏覽器,自動失效;
- 設置有效期時間為0;
註意:在cookie的值為中文時最好使用URLEncoder.encode()來進行編碼,防止中文亂碼。取值時用URLDecoder.decode()來解碼。
4.Session
什麼事session:
- 服務器會給每一個用戶創建一個session對象
- 一個session獨占一個瀏覽器,隻要瀏覽器沒有關閉,這個Session就存在;
- 用戶登錄之後,整個網站都可以訪問 –>保存用戶的信息;
Session常用的方法
Session和cookie的區別:
- Cookie是把用戶的數據寫到用戶的瀏覽器,瀏覽器保存(可以保存多個)
- session把用戶的數據寫到用戶獨占的Session中,服務器端保存(保存重要的信息,減少服務器資源的浪費)
- session對象由服務器創建;
使用場景:
- 保存一個登錄用戶的信息;
- 購物車信息;
- 在整個網站中經常會使用的數據,我們將它保存到Session中;
使用session:
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //解決亂碼 req.setCharacterEncoding("utf-8"); resp.setCharacterEncoding("utf-8"); resp.setContentType("text/html; charset=utf-8"); PrintWriter out = resp.getWriter(); //得到Session HttpSession session = req.getSession(); //給session中存東西 session.setAttribute("name",new Person("張三",18)); //獲取session的id String id = session.getId(); //判斷session是不是新創建的 if(session.isNew()){ out.write("session創建成功,ID:"+id); }else{ out.write("session已經存在,id:"+id); } //Session創建的時候做瞭什麼事 // Cookie jsessionid = new Cookie("JSESSIONID", id); // resp.addCookie(jsessionid); } //Person類 public class Person { private String name; private int age; @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
獲取session中的信息
//得到Session HttpSession session = req.getSession(); Person name = (Person) session.getAttribute("name"); System.out.println(name);
註銷session
//得到Session HttpSession session = req.getSession(); session.removeAttribute("name"); //註銷session session.invalidate();
會話自動過期:web.xml配置
<!-- 設置Session的默認失效時間--> <session-config> <!-- 15分鐘後session自動失效,以分鐘為單位--> <session-timeout>15</session-timeout> </session-config>
到此這篇關於JavaWeb詳細講述Cookie和Session的概念的文章就介紹到這瞭,更多相關JavaWeb Cookie和Session內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- JavaWeb之會話技術案例詳解
- 淺談Servlet的Cookie和Session機制
- Javaweb會話跟蹤技術Cookie和Session的具體使用
- SSM項目使用攔截器實現登錄驗證功能
- JavaWeb會話技術詳解與案例