Java Web05:Cookie和Session
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>

浙公网安备 33010602011771号