Java Web05:Cookie和Session
阿新 • • 發佈:2022-04-19
Cookie
客戶端技術,第一次訪問時伺服器端通過響應傳送,第二次訪問時客戶端通過請求攜帶
資訊存放在客戶端
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.io.PrintWriter; import java.util.Date; public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException { res.setContentType("text/html;charset=utf-8"); PrintWriter out = res.getWriter(); /** * getCookies()方法通過請求獲取Cookie陣列,包含多個Cookie */ Cookie[] cookies = req.getCookies(); boolean isFirst = true; /** * 第一次訪問時沒有Cookie,需要伺服器響應返回Cookie */ for (Cookie cookie : cookies) { /** * 如果存在名為lastLoginTime的Cookie,將其轉換為標準時間 * getName()方法獲得Cookie值 */ if (cookie.getName().equals("lastLoginTime")){ isFirst = false; out.write("上一次訪問時間是:"); long l = Long.parseLong(cookie.getValue()); Date date = new Date(l); out.write(date.toLocaleString()); } } if (isFirst) { out.write("這是第一次訪問,需要響應返回一個Cookie"); } /** * 伺服器端傳送Cookie * new Cookie()方法新建Cookie * addCookie()方法新增Cookie */ Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + ""); res.addCookie(cookie); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); } }
Cookie的限制:
- 一個Cookie只能儲存一個資訊,只能儲存字串
- 一個Web站點最多存放20個Cookie
- Cookie大小限制為4Kb
- 瀏覽器最多存放300個Cookie
刪除Cookie的方法:
- 不設定有效期,關閉瀏覽器自動失效
- 新建一個同名的Cookie,將其有效期設定為0,然後響應回去,可以讓該Cookie立即過期
Session
伺服器端技術,可以儲存使用者的會話資訊,將資訊和資料放在Session中
伺服器會給每一個使用者(瀏覽器)建立一個Session物件,不僅可以儲存字串,還可以儲存物件
伺服器響應給使用者一個Session的ID(就是一個Cookie),使用者憑藉這個ID在伺服器存取資訊,資訊存放在伺服器端
setAttribute()
import javax.servlet.ServletException; import javax.servlet.http.*; import java.io.IOException; import java.io.PrintWriter; public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException { res.setContentType("text/html;charset=utf-8"); PrintWriter out = res.getWriter(); /** * getSession()方法通過請求獲取Session() */ HttpSession session = req.getSession(); /** * setAttribute()方法往Session存東西 * 其本質也是新建了一個個Cookie */ session.setAttribute("name", "Java"); /** * getId()方法獲取Session的ID */ String id = session.getId(); /** * 判斷Session是否已經存在 */ if (session.isNew()) { out.write("Session建立成功,ID為:" + id); } else { out.write("Session已經存在,ID為:" + id); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); } }
getAttribute()
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
public class test extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
res.setContentType("text/html;charset=utf-8");
PrintWriter out = res.getWriter();
/**
* getSession()方法通過請求獲取Session()
*/
HttpSession session = req.getSession();
/**
* getAttribute()方法獲取已經存在的Session
*/
String name = (String) session.getAttribute("name");
out.println(name);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
登出Session的方法:
- invalidate()方法,手動登出
- 配置web.xml檔案,自動登出
<!--配置Session--> <session-config> <!--設定15分鐘後過期--> <session-timeout>15</session-timeout> </session-config>