java web-02-cookie和session
阿新 • • 發佈:2021-10-11
1、儲存會話的兩種技術
cookie
- 客戶端技術(響應,請求)
session
- 伺服器技術,利用這個技術,可以儲存使用者的會話資訊?我們可以把資訊或者資料放在session中!
常見場景:網站登入之後,之後就不用登入直接進入;
2、Cookie
2.1、獲取cookie
public class Cookie01 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html;charset=utf-8"); PrintWriter writer = resp.getWriter(); //伺服器從客戶端獲取cookie,客戶端可能不止一個 Cookie[] cookies = req.getCookies(); if (cookies != null) { writer.write("上一次時間是:"); for (int i = 0; i < cookies.length; i++) { Cookie cookie = cookies[i]; if (cookie.getName().equals("lastLoginTime")){ long l = Long.parseLong(cookie.getValue()); Date date = new Date(l); writer.write(date.toString()); } } }else { writer.write("這是第一次登入本站"); } Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + ""); cookie.setMaxAge(24*60*60); resp.addCookie(cookie); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); }
新增對映
測試!
2.2、刪除cookie
public class Cookie02 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + ""); cookie.setMaxAge(0); resp.addCookie(cookie); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
新增對映
測試!
2.3、防止亂碼
public class Cookie03 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html;charset=utf-8"); PrintWriter writer = resp.getWriter(); //伺服器從客戶端獲取cookie,客戶端可能不止一個 Cookie[] cookies = req.getCookies(); if (cookies != null) { writer.write("上一次訪問名是:"); for (int i = 0; i < cookies.length; i++) { Cookie cookie = cookies[i]; if (cookie.getName().equals("username")) { writer.write(URLEncoder.encode(cookie.getValue(),"utf-8")); } } }else { writer.write("這是第一次訪問本站"); } Cookie cookie = new Cookie("username", URLEncoder.encode("張三","utf-8")); cookie.setMaxAge(60); resp.addCookie(cookie); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
新增對映
測試!
3、session
Session和Cookie的區別:
- Cookie是把使用者的資料寫給使用者的瀏覽器,瀏覽器儲存(可以儲存多個)
- Session把使用者的資料寫到使用者獨佔Session中,伺服器端儲存
- Session物件由服務建立;
3.1、往session裡面存東西
public class Session01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
HttpSession session = req.getSession();
session.setAttribute("name",new Person("zhangsan",20));
String id = session.getId();
if (session.isNew()) {
resp.getWriter().write("session建立成功"+id);
}else {
resp.getWriter().write("session已經存在伺服器中:"+id);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
新增對映
測試!
3.2、從session中獲取我們存進去的資料
public class Session02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
HttpSession session = req.getSession();
Person name = (Person) session.getAttribute("name");
resp.getWriter().println(name);
System.out.println(name);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
新增對映
測試!
3.3、登出session
public class Session03 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
HttpSession session = req.getSession();
session.removeAttribute("name");//移除屬性
session.invalidate();//登出session
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
新增對映
測試!
3.4、設定session自動失效時間
<session-config>
<!--以分鐘為單位-->
<session-timeout>15</session-timeout>
</session-config>