Cookie
1.含义:饼干,其实是一份小数据,是服务器给客户端并且存储在客户端上的一份小数据。 2.应用场景:自动登录、浏览记录、购物车 3.为什么要有Cookie? http的请求是无状态的,即客户端与浏览器通讯的时候是无状态的,当客户端第二来访时服务器根本就不知道这个客户端以前是否访问过。为了更好的用户体验,更好的交互,再者公司为了更好的收集用户的习惯发明了Cookie。 4.什么时候有Cookie? resp.addCookie(new Cookie()) 5.Cookie分类:1)会话Cookie——关闭浏览器,就失效;2)持久Cookie——在指定的期限内有效,并且持续保存在客户端上。cookie.setMaxAge(0);//设置立即删除|cookie.setMaxAge(100);//100秒 6.Cookie怎么用?
Cookie cookie = new cookie(“aa”, "bb");
resp.addCookie(cookie);
Cookie [] cookies = req.getCookies();
if(cookies != null){
for(Cookie c:cookies){
String cookieName = c.getName();
String cookieValue = c.getValue();
System.out.println(cookieName + " = " + cookieValue);
}
}
7.创建对象的几种方法:1)直接new;2)单例模式|提供静态方法;3)工厂模式构建stuFactory、stuBuilder 8.例子:显示最近访问的时间 先在另一个类中定义一个静态函数
public static Cookie findCookie(Cookie[] cookies, String name){
if(cookies != null){
for(Cookie cookie:cookies){
if(name.equals(cookie.getName())){
return cookie;
}
}
}
return null;
}
再进行时间的获取
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
resp.setContentType("text/html;charset=utf-8");
String userName = req.getParamter("username");
String passWord = req.getParamter("password");
if("admin".equals(userName) && "123".equals(passWord)){
Cookies[] cookies = req.getCookies();
Cookie cookie = CookieUtil.findCookie(cookies, "lasttime");
if(cookies == null){
Cookie c = new Cookie("lasttime", System.currentTimeMillis()+" ");
c.setMaxAge(60*60);
resp.addCookie(c);
response.getWriter().write("欢迎您, "+userName);
}else{
long lastVisitTime = Long.parseLong(cookie.getValue());
resp.getWriter().write("欢迎您," + userName + “,上次你来访的时间是:” + new Date(lastVisitTime) + " ");
cookie.setValue(System.currentTimeMillis()+" ");
resp.addCookie(cookie);
}else{
resp.getWriter().write(“登录失败!”);
}
}
Session
1.含义:会话,基于Cookie的一种会话机制。由于Cookie将数据保存在客户端上,同时Cookie的大小与个数有限制,因此存在安全隐患的问题。Cookie是服务器返回一小部分数据给客户端,并且放在客户端上,而Session是数据存放在服务器端的。 2.创建:在servlet里调用req.getSession(). 3.销毁:1)关闭服务器时;2)Session会话时间过期,有效期过了时,默认有效期为30分钟。 session是存放在服务器内存的一份数据,当然也可以使用redis持久化。即使关闭了浏览器,session也不会销毁。 4.例子:购物车
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html:charset=utf-8");
int id = Integer.parseInt(req.getParameter("id"));
String[] names = {"Vivo x5", "小米6", "三星Note8","华为Note40", "魅族7"};
String name = names[id];
Map<String, Integer> map = (Map<String, Integer>)req.getSession.getAttribution();
if(map == null){
map = new LinkedHashMap<String, Integer>();
req.getSession().setAttribute("cart", map);
}
if(map.containsKey(name)){
map.put(name, map.get(name)+1);
}else{
map.put(name,1);
}
resp.getWriter.write("<a href="product_list.jsp"><h3>继续购物</h3></a>");
resp.getWriter.write("<a href="cart.jsp"><h3>去购物车结算</h3></a>");
}
5.常用API:getSession()获取会话id;invalidate()强制关闭会话;seAttribute()添加指定对象到session中;getAttribute()获取对象;removeAttribute()删除session中指定的对象。
|