会话跟踪技术-Cookie

会话跟踪技术
定义和作用
作用是解决Http协议的无状态性
1、客户端技术
Cookie技术
URL重写
隐藏表单域技术
2、服务端技术
数据库技术
(Http)Session技术(会话)

Cookie技术
浏览器有临时目录,有用于存放Cookie信息的文件(一个网站‘Web应用’有独立的Cookie文件)
浏览器接收到响应后自动将响应中的Cookie信息写入Cookie文件(响应头的形式)
浏览器发送请求的时候,自动会将有效Cookie信息随同请求一起提交给服务器(请求头的形式)

protected void service(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        //读取浏览器传递过来的Cookie信息
        Cookie[] cookies = req.getCookies();
        System.out.println("readCookie========");
        if(cookies!=null)
        {
            for(Cookie cookie:cookies)
            {
                System.out.println(cookie.getName()+"-------->"+cookie.getValue());
            }
        }
        
        //写Cookie
        //创建Cookie对象
        Cookie cookie1 = new Cookie("username","aa");
        Cookie cookie2 = new Cookie("age","20");//Cookie不支持汉字
        cookie1.setMaxAge(300);//Cookie有效期单位秒,没设置默认浏览器关闭就消失
        //将Cookie写入res响应对象,若传输很多个一样的,只有最后一个有效
        res.addCookie(cookie1);
        res.addCookie(cookie2);
    }

可用于单点登录(多长时间不用再登陆),示例代码如下:

    protected void service(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        //获取登陆标记,有则登陆,无则获取用户名密码
        res.setContentType("text/html;charset=UTF-8");
        PrintWriter out = res.getWriter();
        Cookie[] cookies = req.getCookies();
        if(cookies!=null&&containLoginFloag(cookies))
        {
            out.println("登陆成功");
        }else
        {
            String name = req.getParameter("userName");
            String pass = req.getParameter("passWord");
            if(name!=null&&!"".equals(name))
            {
                Cookie cookie = new Cookie("YES", "1");
                res.addCookie(cookie);
                out.println("登陆成功");
            }else{
                out.println("登陆失败");
                
            }
        }
        Cookie cookie = new Cookie("YES", "1");
        cookie.setMaxAge(24*60*60);
        res.addCookie(cookie);
    }
    
    private boolean containLoginFloag(Cookie[] cookies)
    {
        boolean bool = false;
        if(cookies!=null)
        {
            for(Cookie cookie:cookies)
            {
                System.out.println(cookie.getName()+"---------->"+cookie.getValue());
                if("YES".equals(cookie.getName()))
                {
                    bool = true;
                    break;
                }
            }
        }
        return bool;
    }

你可能感兴趣的:(会话跟踪技术-Cookie)