zoukankan      html  css  js  c++  java
  • 1.servlet的会话机制cookie

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

    cookie会话:

    1.记录用户上次登录的时间

    2.浏览商品的历史

    3.保存用户名和密码

    cookie的创建

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

    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的小结
    ①cookie是在服务端创建的
    ②cookie是保存在浏览器端
    ③cookie的生命周期可以通过cookie.setMaxAge(2000);
       如果不设置setMaxAge,则该cookie的生命周期当浏览器关闭时,就消亡
    ④cookie可以被多个浏览器共享
    ⑤怎么理解:
        可以把cookie理解成一张表(重名就会替换cookie值)
    ⑥一个web应用可以保存多个cookie
    ⑦cookie存放的时候以明文方式存放,因此安全较低,我们可以通过加密保存,可以用md5(不可逆)算法加密(想起了base64),经过md5加密后存放到数据库,用户输入密码后加密然后再和数据库里面的匹配
     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;
        }

    保存用户的名字的案例:

    登录界面

    String username="";
            Cookie cookies[]=request.getCookies();
             if(cookies!=null){
            for(Cookie cookie:cookies){
                if(cookie.getName().equals("username")){
                    username=cookie.getValue();
                }
               }
             }
           out.println("用户名:<input type='text' name='username' value='"+username+"'/><br/>");
            out.println("密   码:<input type='password' name='password'/><br/>");
            out.println("<input type='checkbox' name='iskeepinfo' value='keep'/>在此电脑上保存用户名<br/>");

    提交后台的servlet

    String val=request.getParameter("iskeepinfo");
            if(val!=null&&val.equals("keep")){
                //保存
                //创建cookie并保存登录用户的机器上
                Cookie cookie=new Cookie("username",username);
                cookie.setMaxAge(7*2*24*3600);
                //会写
                response.addCookie(cookie);
    }
    cookie的细节
    ①一般一个浏览器只允许存放300个cookie,一个web站点最多允许20个cookie,一个cookie的大小为4k
    ②cookie的生命周期
    1.cookie默认生命周期是会话级别
    2.通过setMAxAge()可以设置cookie的生命周期
        setMaxAge(正数),多少秒后cookie失效
        setMaxAge(0),删除cookie
    特别说明:如果web应用只有一个cookie,则删除该cookie后,在浏览器的临时文件夹下没有该cookie文件,如果该web应用有多个cookie,则删除一个cookie后,文件夹还在,只是该cookie没有了。
    setMaxAge(负数),相当于cookie生命周期是会话级别。
    3.cookie存放中文,怎样处理
       存放
    String val=java.net.URLEncoder.encode("顺平","utf-8");
        Cookie cookie=new Cookie("name",val);
    

     取出

    String val=java.net.URLDecoder.decode("cookie.getValue()","utf-8");
       out.println("name="+val);
    

      

     
  • 相关阅读:
    spark streaming 概述
    spark sql 的性能调优
    LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal (用中序和后序树遍历来建立二叉树)
    LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal (用先序和中序树遍历来建立二叉树)
    LeetCode 90. Subsets II (子集合之二)
    LeetCode 88. Merge Sorted Array(合并有序数组)
    LeetCode 81. Search in Rotated Sorted Array II(在旋转有序序列中搜索之二)
    LeetCode 80. Remove Duplicates from Sorted Array II (从有序序列里移除重复项之二)
    LeetCode 79. Word Search(单词搜索)
    LeetCode 78. Subsets(子集合)
  • 原文地址:https://www.cnblogs.com/sunli0205/p/5882220.html
Copyright © 2011-2022 走看看