用戶打開一個瀏覽器到關閉瀏覽器,這個過程能夠稱之爲會話。html
客戶端再次訪問服務端時,服務端知道客戶端曾經來過,稱之爲有狀態會話。java
Cookie[] cookies = req.getCookies();//獲取cookie cookie.getName();//獲取cookie的key cookie.getValue();//獲取cookie的value Cookie cookie = new Cookie("lastLoginTime",String.valueOf(System.currentTimeMillis()));//新建cookie cookie.setMaxAge(24*60*60);//設置cookie有效期設置爲1天 resp.addCookie(cookie);//響應給客戶端一個cookie
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.qing</groupId> <artifactId>javaweb-cookie-session</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.3</version> </dependency> </dependencies> </project>
package com.qing.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.io.PrintWriter; import java.util.Date; /** * 保存用戶上一次訪問的時間 */ public class CookieDemo01 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"); PrintWriter out = resp.getWriter(); //Cookie,服務端從客戶端獲取 Cookie[] cookies = req.getCookies();//這裏返回數組,說明cookie可能存在多個 //判斷cookie是否存在,第一次訪問服務器時,不存在,cookie是由服務器給客戶端的 if (cookies == null || cookies.length < 1) { out.write("這是您第一次訪問本站"); } else { //若是存在,讀取cookie,獲取cookie中的值 boolean flag = true; for (int i = 0; i < cookies.length; i++) { Cookie cookie = cookies[i]; if ("lastLoginTime".equals(cookie.getName())) { flag = false; out.write("您上一次訪問本站的時間是:"); long lastLoginTime = Long.parseLong(cookie.getValue()); out.write(new Date(lastLoginTime).toLocaleString()); System.out.println(new Date(lastLoginTime).toLocaleString()); } } if (flag) { out.write("這是您第一次訪問本站"); } } //服務器給客戶端響應一個cookie Cookie cookie = new Cookie("lastLoginTime",String.valueOf(System.currentTimeMillis())); //cookie有效期設置爲1天 cookie.setMaxAge(24*60*60); resp.addCookie(cookie); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0" metadata-complete="true"> <servlet> <servlet-name>cookieDemo01</servlet-name> <servlet-class>com.qing.servlet.CookieDemo01</servlet-class> </servlet> <servlet-mapping> <servlet-name>cookieDemo01</servlet-name> <url-pattern>/cookie</url-pattern> </servlet-mapping> </web-app>
package com.qing.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 SessionDemo01 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"); //獲得session HttpSession session = req.getSession(); //給session存數據 session.setAttribute("name","清風"); //獲取session的ID String id = session.getId(); //判斷session是否是新建立的 if (session.isNew()) { resp.getWriter().write("session建立成功,ID:" + id); } else { resp.getWriter().write("session已經在服務器中存在了,ID:" + id); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
package com.qing.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 SessionDemo02 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"); //獲得session HttpSession session = req.getSession(); //從session中取數據 String name = (String) session.getAttribute("name"); System.out.println(name); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
package com.qing.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 SessionDemo03 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"); //獲得session HttpSession session = req.getSession(); //手動註銷session session.invalidate(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0" metadata-complete="true"> <servlet> <servlet-name>cookieDemo01</servlet-name> <servlet-class>com.qing.servlet.CookieDemo01</servlet-class> </servlet> <servlet-mapping> <servlet-name>cookieDemo01</servlet-name> <url-pattern>/cookie</url-pattern> </servlet-mapping> <servlet> <servlet-name>sessionDemo01</servlet-name> <servlet-class>com.qing.servlet.SessionDemo01</servlet-class> </servlet> <servlet-mapping> <servlet-name>sessionDemo01</servlet-name> <url-pattern>/session1</url-pattern> </servlet-mapping> <servlet> <servlet-name>sessionDemo02</servlet-name> <servlet-class>com.qing.servlet.SessionDemo02</servlet-class> </servlet> <servlet-mapping> <servlet-name>sessionDemo02</servlet-name> <url-pattern>/session2</url-pattern> </servlet-mapping> <servlet> <servlet-name>sessionDemo03</servlet-name> <servlet-class>com.qing.servlet.SessionDemo03</servlet-class> </servlet> <servlet-mapping> <servlet-name>sessionDemo03</servlet-name> <url-pattern>/session3</url-pattern> </servlet-mapping> <!--設置session的默認失效時間--> <session-config> <!--15分鐘後session自動失效,以分鐘爲單位--> <session-timeout>15</session-timeout> </session-config> </web-app>
<!--設置session的默認失效時間--> <session-config> <!--15分鐘後session自動失效,以分鐘爲單位--> <session-timeout>15</session-timeout> </session-config>