Cookie,Session
会话
会话:用户打开一个浏览器,点击很多超链接,访问多个web资源,关闭浏览器,这个过程称之为会话。
有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学,曾经来过,称之为有状态会话。
一个网站,怎么证明你来过?
客户端 服务端
1服务端给客户端一个Cookie一个信件,客户端下次访问服务端带上新建就行了。Cookie
2服务器登记你来过了,下次你来的时候我来匹配你。
保存会话的两种技术
Cookie
客户端技术 (响应,请求)
从请求中拿到cookie信息
服务器响应给客户端cookie
Session(重点)
服务器技术,利用这个技术,可以保存用户的会话信息,我们可以把信息或者数据放在Session中。
常见场景,登陆网站会记住你的登陆信息。第二次会直接登录上去。
Cookie
注意:
一个Cookie只能保存一个信息
一个web站点可以给浏览器发送多个Cookie,最多存放20个
Cookie的大小4KB
300个Cookie上限
乱码问题
URLEncoder.encode("中文","utf-8");//编码
URLDecoder.decode(cookie.getValue(),"utf-8");//解码
代码获取上次打开网站的时间
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
//Cookie服务器端从客户端获取
PrintWriter out = resp.getWriter();
Cookie[] cookies = req.getCookies();//可能存在多个cookie
if(cookies!=null)
{
//如果存在
out.write("上次访问时间");
for (Cookie cookie : cookies) {
//获取cookie的名字
String name = cookie.getName();
if (name.equals("lastTime")) {
//获取cookie中的值
long l = Long.parseLong(cookie.getValue());
Date date = new Date(l);
out.write(date.toLocaleString());
}
}
}else {
out.write("第一次访问");
}
Cookie cookie = new Cookie("lastTime",System.currentTimeMillis()+"");
cookie.setMaxAge(24*60*60);//设置一天的有效期
resp.addCookie(cookie);
}
Session
什么是Session
服务器会给每一个用户(浏览器)创建一个Seesion对象;
一个Session独占一个浏览器,只要浏览器没有关闭,这个Session就存在
用户登录之后,整个网站都可以访问。->保存用户的信息 ;保存购物车的信息。。。
Session和Cookie区别
Cookie是吧用户的数据写给用户的浏览器,浏览器保存(可以保存多个)
Session把用户的数据写道用户独占Session中,服务器端保存(保存重要的信息,减少服务器资源的浪费)
Session对象的创建;
HttpSession session = req.getSession();
//给Session中存东西
session.setAttribute("name",new Person("星星",1));
注销Session
手动
session.removeAttribute("name");
//手动注销session
session.invalidate();
自动
<!--设置Session的默认失效时间-->
<session-config>
<session-timeout>1</session-timeout>
</session-config>
使用场景
1保存一个登陆用户的信息
2购物车信息
3在整个网站中经常会使用的数据,保存在Session中
来源:CSDN
作者:笑---
链接:https://blog.csdn.net/XINGXINGR/article/details/104199879