cookie、session
会话
会话:用户打开浏览器,点了很多超链接,访问多个web资源,关闭浏览器这个过程称之为会话
有状态会话:一个同学来过教室,下次再来教室,我们知道他曾经来过。
保存会话的两种技术
cookie
客户端技术(响应,请求)
session
服务器技术,利用这个技术可以保存用户的会话信息,我们可以把信息或数据保存到session中。
cookie
- 从请求中拿到cookie信息
- 服务器响应给客户端cookie
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
Cookie[] cookies = req.getCookies();
int flag=-1;
for (int i = 0; i < cookies.length; i++) {
if (cookies[i].getName().equals("loginTime")){
flag=i;
break;
}
}
if (flag!=-1){
long loginTime = Long.parseLong(cookies[flag].getValue());
Date date = new Date(loginTime);
System.out.println(date.toLocaleString());
}else {
System.out.println("欢迎您首次到来!");
}
//每次登录网站都会更新时间
Cookie loginTime = new Cookie("loginTime", System.currentTimeMillis() + "");
//给cookie设置一个有效期
loginTime.setMaxAge(24*60*60);
resp.addCookie(loginTime);
}
cookie存在上限
- 一个cookie只能保存一个信息
- 一个web站点可以给浏览器发送多个cookie,最多存放20个cookie
- cookie站点有限制大小为4kb
- 浏览器上限300个cookie
删除cookie
不设置有效期,关闭浏览器,自动失效
设置有效期为0
编码解码
URLEncoder.encode("中文","utf-8");
URLDecoder.decode(cookies[0].getValue(),"utf-8");
session
介绍
- 服务器会给每一个用户(浏览器)创建一个session对象
- 一个session独占一个浏览器,只要浏览器没关闭,这个session就存在
- 用户登陆之后整个网站都可以访问 -->保存用户的信息
@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();
//得到sessionId
String id = session.getId();
//在session中存储属性
session.setAttribute("name","小黑子");
if (session.isNew()){
resp.getWriter().write(id+"创建成功!");
}else{
resp.getWriter().write(session.getAttribute("name")+"属性设置成功!");
}
//手动注销session
session.invalidate();
}
设置session有效日期
<session-config>
<!-- 以分钟为单位-->
<session-timeout>15</session-timeout>
</session-config>
session和cookie的区别
- cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)
- session是把用户的数据写到用户独占session中,服务端保存(保存重要的资源,减少服务器资源的浪费)