JavaWeb03 Cookie和Session

一个网站怎么证明你来过?

1.首次访问时服务器给客户端一个cookie,下次客户端再次访问会自动携带cookie,注意cookie可以是多个

2.首次访问时服务器登记了客户端一系列信息,下次客户端再进行访问时服务器自动匹配此客户端是否访问过

cookie

JavaWeb03 Cookie和Session_第1张图片

一个网站的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);
    }
}

运行结果:

JavaWeb03 Cookie和Session_第2张图片

 cookie的应用2:传递含有中问字符的cookie

JavaWeb03 Cookie和Session_第3张图片

 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的有效期


    
        5
    

小结:cookie和session的区别

cookie是用户数据写给浏览器,浏览器保存(多个)

session是把用户数据写到用户独占的session中,各个用户的信息互不干扰,服务器保存(只存储重要信息,防止资源浪费)

你可能感兴趣的:(JavaWeb,服务器,servlet)