一个网站怎么证明你来过?
1.首次访问时服务器给客户端一个cookie,下次客户端再次访问会自动携带cookie,注意cookie可以是多个
2.首次访问时服务器登记了客户端一系列信息,下次客户端再进行访问时服务器自动匹配此客户端是否访问过
cookie

一个网站的cookie是否存在上限?
答:一个web站点可给浏览器方式多个cookie,最多20个,cookie大小有限制是4kb,300个cookie是浏览器的上限
一个cookie是只能保存一个信息吗?
cookie的应用1:记录访问时间
public class CookieServlet extends HttpServlet {
    @Override
    protected 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();//这里返回数组,可能存在多个cookie
        if (cookies != null) {
            //如果存在cookie
            w.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 {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决中文乱码
        resp.setHeader("Content-type","text/html;charset=utf-8");
        PrintWriter w=resp.getWriter();
        //获取session
        HttpSession 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 {
    @Override
    protected 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 {
    @Override
    protected 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中,各个用户的信息互不干扰,服务器保存(只存储重要信息,防止资源浪费)



















