Java Web 之 Cookie 和 Session 详解
我们知道 http 协议是无状态的,也就是说就算客户端是第二次访问服务器,服务器还是把此次访当做一个新的访问进行处理,因为服务端并不知道客户端之前是否访问过。而 cookie 和 session 则就是为了弥补这一缺陷出现的一种机制。
Cookie
Cookie 为服务器给客户端的数据, 可以让服务器清楚的知道该客户端是否访问过自己
常用方法
Cookie cookie = new Cookie("name", value);//创建一个名为name, 值为value的cookie
cookie.setMaxAge(1*60*60*24);//cookie存在在本地的有效时长(单位为秒) 默认为-1 表示页面关闭cookie就失效
cookie.setDomain("");//设置在某个域名下生效
cookie.setPath("/login.jsp");//设置访问该域名下某个路径时生效
cookie.setMaxAge(0);//cookie中的account
response.addCookie(cookie);//添加到response, 相当于服务器创建一个cookie并将之给客户端
Cookie[] cookies=request.getCookies();//获取cookies
cookie.getName();//cookie的name
cookie.getValue();//cookie的value
- 利用 cookie 实现一个记住网站登陆时间的小 demo
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
Cookie[] cookies = req.getCookies();
if(cookies != null){
// 如果存在
out.write("你上一次访问的时间是:");
for (int i=0;i<cookies.length;i++) {
if(cookies[i].getName().equals("lastLoginTime")){//获取cookie的名字
long lastTime = Long.parseLong(cookies[i].getValue()); // 把字符串解析为长整型 把字符串转为时间戳
Date date = new Date(lastTime);
out.write(date.toLocaleString());
}
}
}else {
out.write("这是你第一次访问本网站!");
}
// 服务器给客户端响应一个cookie
Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis()+"");
resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
Session
- 服务器会给每个用户(浏览器)创建一个 session 对象
- 一个 session 独占一个浏览器, 只要浏览器没关, session 就会一直存在
- 通常用来保存用户信息, 既可以保存数据, 也可以保存一个对象
session 的用法
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
req.setCharacterEncoding("utf-8");
// 得到session
HttpSession session = req.getSession();
// 给session中存东西
session.setAttribute("name","wuhobin"); //可以存数据
session.setAttribute("person",new Person("wuhobin","123",20)); // 也可以存一个对象
String id = session.getId();
// 判断session是不是新创建的
if(session.isNew()){
resp.getWriter().write("session创建成功,id:"+id+","+session.getAttribute("name"));
resp.getWriter().write(session.getAttribute("person").toString());
}else {
resp.getWriter().write("session已经存在,id:"+id+","+session.getAttribute("name"));
resp.getWriter().write(session.getAttribute("person").toString());
}
session 注销
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
session.removeAttribute("name");
session.removeAttribute("person");
// 手动注销session
session.invalidate();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
通过 web.xml 来注销
<!-- 设置session默认的消失时间 -->
<session-config>
<!-- 15分钟后session自动消失 -->
<session-timeout>15</session-timeout>
</session-config>
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于