JavaWeb03 Cookie和Session
一个网站怎么证明你来过?
1.首次访问时服务器给客户端一个cookie,下次客户端再次访问会自动携带cookie,注意cookie可以是多个
2.首次访问时服务器登记了客户端一系列信息,下次客户端再进行访问时服务器自动匹配此客户端是否访问过
cookie
一个网站的cookie是否存在上限?
答:一个web站点可给浏览器方式多个cookie,最多20个,cookie大小有限制是4kb,300个cookie是浏览器的上限
一个cookie是只能保存一个信息吗?
cookie的应用1:记录访问时间
public class CookieServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解决中文乱码resp.setHeader("Content-type","text/html;charset=utf-8");PrintWriter w = resp.getWriter();Cookie[] cookies = req.getCookies();//这里返回数组,可能存在多个cookieif (cookies != null) {//如果存在cookiew.write("上一次访问时间是:");for (int i = 0; i < cookies.length; i++) {Cookie cookie = cookies[i];if (cookie.getName().equals("lastlogintime")) {//某个cookie记录的是用户上次访问此网站的时间//获得cookie中的值long lastlogintime = Long.parseLong(cookie.getValue());Date date = new Date(lastlogintime);w.write(date.toLocaleString());}}} else {w.write("这是你第一次访问!");}Cookie cookie=new Cookie("lastlogintime",System.currentTimeMillis()+"");cookie.setMaxAge(24*60*60);//cookie有效期:1min后失效resp.addCookie(cookie);}
}
运行结果:
cookie的应用2:传递含有中问字符的cookie
Session(重点)
session就是一个会话,一个用户通过浏览器刷b站,点了很多个超链接最后关闭浏览器这一过程就是一个会话。
session使用场景:保存用户登录信息,购物车信息,网站中用户经常用到的数据
服务器会给每一个浏览器 创建一个session对象,session有保存用户信息的功能,同时我们也可以向session存放信息
session应用1:向session中存东西和从session中获得东西
public class SessionDemo01 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解决中文乱码resp.setHeader("Content-type","text/html;charset=utf-8");PrintWriter w=resp.getWriter();//获取sessionHttpSession session=req.getSession();//向session中存东西,因为用户访问了网页,所以就要登记信息session.setAttribute("name",new Person("cl",1));//通过session拿到用户id并打印String sessionid=session.getId();w.write(sessionid);//判断session是否为新创建的if(session.isNew()){w.write("session创建成功!id是:"+sessionid);}else {resp.getWriter().write("session已经在服务端存在");}
}}
session应用2:
我在session应用1代码中创建了一个person对象
这个语句:session.setAttribute("name",new Person("cl",1));
然后我可以在另一个session文件查询到session应用1这个person的信息
public class SessionDemo02 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解决中文乱码resp.setHeader("Content-type","text/html;charset=utf-8");HttpSession session=req.getSession();Person person=(Person)session.getAttribute("name"); //通过session获取对象的属性值System.out.println(person.toString());//在终端打印出}
}
session应用3:移除session的某些属性和注销session
public class SessionDemo03 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {HttpSession session=req.getSession();session.removeAttribute("name");//从session中移除属性session.invalidate();//手动注销session}
}
在web.xml文件中设置session的有效期
<!-- 可设置session失效时间,5min--><session-config><session-timeout>5</session-timeout></session-config>
小结:cookie和session的区别
cookie是用户数据写给浏览器,浏览器保存(多个)
session是把用户数据写到用户独占的session中,各个用户的信息互不干扰,服务器保存(只存储重要信息,防止资源浪费)