zoukankan      html  css  js  c++  java
  • Servlet学习-会话技术cookie

    会话:用户开一个浏览器,访问一个网站,只要不关闭该浏览器,不管该用户点击多少个超链接,访问多少资源,直到用户关闭浏览器,整个这个过程我们称为一次会话。

    为什么要使用cookie

    1.记录用户的事件

    2.浏览历史记录

    3.用户名和密码的记录

    //createcookie.java
    //
    创建cookie(api) Cookie cookie=new Cookie("name","cookietest"); //设置cookie的生命周期 cookie.setMaxAge(3600); //把cookie信息写回给浏览器 response.addCookie(cookie);


    //
    readcookie.java //读取所有cookie信息 Cookie cookies[]=request.getCookies(); //遍历cookie for(int i=0;i<cookies.length;i++){   Cookie cookie=cookies[i];   out.println("cookie 名字= "+cookie.getName());//cookie只能放字符串 }

     cookie:

    1.cookie是在服务端创建的

    2.cookie是保存在浏览器这端的

    3.cookie的生命周期可以通过cookie.setMaxAge();如果不设置,关闭浏览器就destroy了

    4.cookie可以被多个浏览器共享

    5.怎么理解:把cookie假设成一张表  名字(String):值(String)

      所有共享这张表,名字如果重复了就会替换掉存在的cookie值。

    6.一个WEB应用可以保存多个cookie

    7.cookie存放的时候是以明文方式存放的,因此安全比较低,我们可以通过加密后保存,可以用md5(不可逆)算法加密(想起了base64),经过md5加密后存放到数据库,用户输入密码后加密然后再和数据库里面的匹配。

    //获得cookie记录上次登录时间
        private String getLasttime(HttpServletRequest request,
                HttpServletResponse response) {
            //先获取cookie
            //保存上次登陆时间的cookie “2012-11-13 12:36:22”
            Cookie []cookies=request.getCookies();
            // 首次登录
            boolean b=false;
            String returnName="";
            //获取时间,用于更新cookie
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYY-MM-DD HH:mm:ss");
            String nowTime=simpleDateFormat.format(new java.util.Date());
            //遍历cookie找到需要的值
            if(cookies!=null)
            {
            for(Cookie cookie:cookies)
            {
                //取名字
                String name=cookie.getName();
                if("lasttime".equals(name))
                {
                    returnName=cookie.getValue();
                    //更新cookie 的时间
                    Cookie mycookie = new Cookie("lasttime",nowTime);
                    mycookie.setMaxAge(7*24*3600);
                    response.addCookie(mycookie);
                    b=true;
                    break;
                }
                
            }
            }
            if(!b)//第一次登陆的设置
            {
                Cookie mycookie=new Cookie("lasttime",nowTime);
                mycookie.setMaxAge(7*24*3600);
                response.addCookie(mycookie);
                returnName=null;
            }
            return returnName;
        }

     cookie的细节:

    1,,一个web应用可以给浏览器发送多个cookie,一个浏览器可以存储多个web应用提供的cookie。一般只允许存放300个cookie,每个web应用最多放 20个,每个cookie大小4KB,因此不会塞满硬盘,也不会被用作“拒绝服务”攻击手段。

    2,cookie的默认生命周期是会话级别的,关闭浏览器后就被删除,可以通过setMaxAge()设置cookie 的生命周期。setMaxAge(0)删除该cookie:要保持path一致,否则无法删除,

    setMaxAge(负数),则该cookie是会话级别的。

    cookie.setMaxAge(0);
    response.addCoookie(cookie);//必须带,相当于执行语句

     如果该cookie只有一个值,则删除cookie后文件会被删除,否则文件不会被删除。

    //如果cookie存放中文
    //创建cookie(api)
    String val=java.net.URLEncoder.encode("中文","utf-8");
    Cookie cookie=new Cookie("name",val);
    
    
    //读取有中文的cookie要用base64进行解码
    String val=java.net.URLDecoder.decode(cookie.getValue(),"utf-8");
    
    
  • 相关阅读:
    第十四周 Leetcode 315. Count of Smaller Numbers After Self(HARD) 主席树
    POJ1050 To the Max 最大子矩阵
    POJ1259 The Picnic 最大空凸包问题 DP
    POJ 3734 Blocks 矩阵递推
    POJ2686 Traveling by Stagecoach 状态压缩DP
    iOS上架ipa上传问题那些事
    深入浅出iOS事件机制
    iOS如何跳到系统设置里的各种设置界面
    坑爹的私有API
    业务层网络请求封装
  • 原文地址:https://www.cnblogs.com/bersaty/p/3217677.html
Copyright © 2011-2022 走看看