JavaWeb-Cookie和Session
阿新 • • 發佈:2021-08-17
cookie:存放在客戶端
session:存放在服務端
cookie
package com.th0r.servlet; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Date; public class Demo1 extends HttpServlet { @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"); if (req.getCookies() != null){ resp.getWriter().print("你上次訪問的時間是:"); for (Cookie cookie : req.getCookies()) { if (cookie.getName().equals("lastLogin")){ long l = Long.parseLong(cookie.getValue()); Date date = new Date(l); resp.getWriter().print(date.toString()); } } } else { resp.getWriter().println("這是你第一次訪問"); } //設定cookie Cookie cookie = new Cookie("lastLogin", System.currentTimeMillis() + ""); //設定cookie有效期 cookie.setMaxAge(2*60*60); resp.addCookie(cookie); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } }
第一次訪問
第二次訪問
- 一個cookie只能儲存一個資訊
- 一個web站點可以傳送多個cookie,最多存放20個
- cookie的大小限制為4kb
- 瀏覽器的cookie上限為300個
刪除cookie的方法
- 不設定有效期,關閉瀏覽器,自動失效
- 設定有效期為0
Session
- 伺服器會給每一個使用者(瀏覽器)建立一個Seesion物件
- 一個Seesion獨佔一個瀏覽器,只要瀏覽器沒有關閉,這個Session就存在
- 使用者登入之後,整個網站它都可以訪向
建立Session
package com.th0r.servlet; import com.th0r.pro.Person; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; public class Demo3 extends HttpServlet { @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"); HttpSession session = req.getSession(); session.setAttribute("name", new Person("Bob", 18)); String sessionId = session.getId(); if (session.isNew()){ resp.getWriter().write("Session 建立成功" + sessionId); } else { resp.getWriter().write("Session 已存在" + sessionId); Person person = (Person)session.getAttribute("name"); resp.getWriter().print("\n"+person); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } }
銷燬session
package com.th0r.servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; public class Demo4 extends HttpServlet { @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"); HttpSession session = req.getSession(); if (session.getAttribute("name") != null){ session.removeAttribute("name"); session.invalidate(); resp.getWriter().println("登出成功!"); }else { resp.getWriter().println("未登入!"); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } }
設定時間
web.xml
<session-config>
<session-timeout>15</session-timeout>
</session-config>