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);
    

      

     
  • 相关阅读:
    shell的执行顺序问题
    七层负载均衡——HAProxy
    不要自以为是码农
    SSL协议运行机制
    Linux启动流程
    MIM协议与Base64编码
    Adele的生活
    你值得拥有:25个Linux性能监控工具
    [Zabbix] 如何实现邮件报警通知以及免费短信报警通知
    php.ini中date.timezone设置分析
  • 原文地址:https://www.cnblogs.com/sunli0205/p/5882220.html
Copyright © 2011-2022 走看看