狂神说Java Web学习笔记_Cookie & Session
Cookie
保存会话的两种技术, Cookie(客户端技术), Session(服务端技术)
服务器端设置token,从客户端获取token
Cookie[] cookies = req.getCookies();//从客户端获取cookie
cookie.getName();//获取cookie名字
cookie.getValue();//获取cookie值
Cookie cookie = new Cookie("lastLoginTime",System.currentTimeMillis() + "");//创建cookie
resp.addCookie(cookie);//服务端给客户端返回一个cookie
package com.bambi;
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.text.SimpleDateFormat;
import java.util.Date;
public class CookieExample extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html; charset=UTF-8");
Cookie[] cookies = req.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("lastLoginTime")) {
long l = Long.parseLong(cookie.getValue());
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
resp.getWriter().write("你上一次访问本站的时间为: " + format.format(l));
}
}
} else {
resp.getWriter().write("第一次访问本站~");
}
Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + "");
resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
<servlet>
<servlet-name>cookie</servlet-name>
<servlet-class>com.bambi.CookieExample</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cookie</servlet-name>
<url-pattern>/cookie</url-pattern>
</servlet-mapping>


设置token有效期
cookie.setMaxAge(24 * 60 * 60);//设置cookie有效期为1天

Session
常用方法
HttpSession session = req.getSession();
session.invalidate();
session.setAttribute("name", "summer");
session.isNew();
session.getId();
方法实践
SessionDemo01设置attribute "name"
package com.bambi.session;
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");
HttpSession session = req.getSession();
session.setAttribute("name", "summer");
resp.getWriter().write("sessionId: " + session.getId());
if (session.isNew()) {
resp.getWriter().write("sessionId刷新了");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
SessionDemo02获取attribute "name"
package com.bambi.session;
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");
HttpSession session = req.getSession();
String name = (String) session.getAttribute("name");
resp.getWriter().write("name: " + name);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
SessionDemo03设置session invalid
package com.bambi.session;
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");
HttpSession session = req.getSession();
session.invalidate();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.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">
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>cookie</servlet-name>
<servlet-class>com.bambi.CookieExample</servlet-class>
</servlet>
<servlet>
<servlet-name>session01</servlet-name>
<servlet-class>com.bambi.session.SessionDemo01</servlet-class>
</servlet>
<servlet>
<servlet-name>session02</servlet-name>
<servlet-class>com.bambi.session.SessionDemo02</servlet-class>
</servlet>
<servlet>
<servlet-name>session03</servlet-name>
<servlet-class>com.bambi.session.SessionDemo03</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cookie</servlet-name>
<url-pattern>/cookie</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>session01</servlet-name>
<url-pattern>/session01</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>session02</servlet-name>
<url-pattern>/session02</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>session03</servlet-name>
<url-pattern>/session03</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>2</session-timeout><!-- 以分钟为单位 -->
</session-config>
</web-app>
调用session01,此时session中就已经存在了一个name参数。

调用session02,获取到name的值。

调用session03,将session设置为invalid。此时再次调用session02的话,将获取不到name了。
