zoukankan      html  css  js  c++  java
  • Cookie

    • 什么是cookie

      Cookie可以看作是容器中的一个工具类,只是封装了一些头部有关的属性,单独择出来封装为一个类(我自己的理解)也可以从会话概念入手:就像日常的会话一样,话题进行的每个阶段必然都会产生一些状态或flag,作为会话进行的依据。session和cookie就是用来在会话双方保存这些flag的对象。

           (其实也完全可以自己写一个javabean用来作为该对象,但是这样不能保证通用性,且还要在页面中被传来传去,既然是服务器当然就做一些周全的服务,规范和标准,抽象程度越高通用性就越高;也可以使用数据库,想一想将会增加多少连接次数)

    • cookie应用代码

      结构目录

      

        login.java

    package com.example.web;
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    //服务端并不保存cookie对象,仅仅是封装了头部一个属性,在发送和获取时使用该封装
    public class Login extends HttpServlet{
        
        private static final long serialVersionUID = 5028881790713553760L;
        
        public void doGet(HttpServletRequest req,HttpServletResponse res) throws IOException, ServletException {
            res.setContentType("text/html");
            res.setCharacterEncoding("utf-8");
            String name = req.getParameter("username");
            System.out.println("登陆成功,省略跳转首页,用户名是:"+name);
            Cookie cookie = new Cookie("username",name);
            res.addCookie(cookie);//下面随便发送一些内容给浏览器;当客户端已存在cookie时也可以jsp中req无如何访问cookie,但是根据mvc设计理念jsp中不应该访问!!
            res.getWriter().println("你好cookie小甜饼已经送达请允许浏览器接受保存,只要你访问该地址时,浏览器会找到匹配的cookie作为请求状态发送给我,我就知道你是谁了");
        
        }
    }

        只要在描述符中填充该对应标签,就可以访问了,由容器提供给res一个cookie对象,它封装了响应首部的会话部分,跟随响应发送给客户端,测试后查看浏览器控制台:响    应首部中携带着setcookie,浏览器会把其保存在硬盘或内存中,以后的请求中,只要用户不强制清除缓存或者关闭浏览器、cookie失效等,访问该地址时请求首部都会携带    该cookie信息。下面的程序是获取cookie,因为同属一个应用,所以可以获取到。

        havaCookie.java:

    package com.example.web;
    import java.io.IOException;import java.net.HttpCookie;
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    //首先登陆案例,系统需要一直时登陆状态!也可以假设其是过滤器,每个sev执行之前都要进行过滤判断
    public class havaCookie extends HttpServlet{
        
        public void doGet(HttpServletRequest req,HttpServletResponse res) 
                throws IOException, ServletException{
            res.setCharacterEncoding("utf-8");
            res.setContentType("text/html");
            Cookie[] ck = req.getCookies();//应用可能给客户端许多ck对象,我们
            if(ck == null) {//未登陆,进入登陆页面(重定向模拟一下即可!)
                res.sendRedirect("login.do?username='xiaolifeidao'");
                System.out.println("打印说明cookie为null");
            }else {//已登陆,重置失效时长,并重定向到请求地址,这里不获取地址,直接指定一个
                System.out.println("进来说明cookie非null");
                for(int i=0;i<ck.length;i++) {
                    Cookie cook = ck[i];
                    System.out.println("打印说明程序在便利cookie");
                    if(cook.getName().equals("username")){
                        
                        String username = cook.getValue();
                        System.out.println("是登陆状态,过滤器已经获取到cookie:"+username);
                        res.sendRedirect("process.do?username=xiaolifeidao");
                        cook.setMaxAge(10);
                        
                        //查看cookie的其他属性,测试一下
                        System.out.println("下面是ck的domain:"+cook.getDomain()+"ck的maxage"+cook.getMaxAge()
                                           +"ck的有效路径"+cook.getPath()+"版本"+cook.getVersion());
                        
                    }
                }
            }
            
            
            res.getWriter().println("程序已经执行完毕!");
        }
    }
    View Code

        上面的程序是对cookie的获取,当用户浏览器已经保存了cookie信息后,只要之前的前提条件成立发送中都携带请求,测试请求该地址,浏览器控制台中会发现该请求携带    首部携带者cookie信息,然后程序中req就可以的到解析出来的cookie对象。值得注意的是:getcookies获取的是一个数组,因次需要遍历查找。这个程序可以假想为登陆合    法验证程序或者过滤器(虽然里面并没有这部分逻辑代码),验证合法后重定向到另一个程序(设想为欢迎页面或首页,或一个具体的应用逻辑),这样一个会话过程就开    始了。

        Process.java:

    package com.example.web;
    
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class Process extends HttpServlet{
          
        private static final long serialVersionUID = 2856962985282606619L;
    
        public void doGet(HttpServletRequest req,HttpServletResponse res){
              System.out.println(req.getParameter("username")+"已经付款成功!");
          }
    }
    View Code

        总结:cookie是不保存在服务端的,它只是对首部的封装,在没有其他内容了,这就是cookie,具体方法略去不表,了解其本质的前提下在应用中具体发挥就可以了。

  • 相关阅读:
    ##微信登陆,给大家分享一个第三方登陆
    ##Solr的各种版本下载
    ##redis在linux上的安装详解
    ##activeMq的简介与安装
    ##Springboot框架--配置文件介绍
    论面向服务架构及其应用
    MVC架构模式
    第八周总结
    细化架构阅读笔记
    第五周总结
  • 原文地址:https://www.cnblogs.com/10000miles/p/9273659.html
Copyright © 2011-2022 走看看