Cookie、Session
会话
会话:用户打开一个浏览器,点击了很多超链接,访问多个Web资源,关闭浏览器,这个过程称之为会话。
有状态会话:
一个网站,怎么证明自己来过?
客户端 服务端
1. 服务端给客户端一个信件
2. 客户端下次访问服务端带上信件就可以了:Cookie
3. 服务器登记你来过,下次客户端来的时候进行匹配:Session
保存会话的两种技术
Cookie
- 客户端技术(响应、请求
Session
- 服务端技术,利用这个技术,可以保存用户的会话信息
1.cookie
1.从请求中拿到cookie信息
2.服务器响应给客户端cookie
package com.java.servlet;
import javafx.scene.chart.PieChart;
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 {
//服务器告诉你,你来的时间,把这个时间转化为信件(cookie),你下带来,我就知道了
req.setCharacterEncoding("utf-16");
resp.setCharacterEncoding("utf-16");
PrintWriter out = resp.getWriter();
//cookie,服务器端从客户端获取
Cookie[] cookies = req.getCookies();
//判断cookies是否存在
if(cookies!=null){
out.write("上次访问的时间");
for(int i = 0;i<cookies.length;i++){
Cookie cookiee = cookies[i];
if (cookiee.getName().equals("name")){
//获取cookie中的时间
long time = Long.parseLong(cookiee.getValue());
Date data = new Date(time);
out.write(data.toLocaleString());
}
}
}else{
out.write("第一次访问站点");
}
Cookie cookie = new Cookie("name", System.currentTimeMillis()+"");
//设置cookie有效期s
cookie.setMaxAge(60*60);
resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
cookie位置:一般保存在本地目录下的appdata下
cookie上限:
- 一个cookie只能保存一个信息
- 一个web站点可以给浏览器发送多个cookie,最多存放20个
- cookie大小限制4kb
- 浏览器上限300个
cookie删除: - 不设置有效期,关闭浏览器,自动失效
- 设置为0,直接删除
cookie.setMaxAge(0);