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

  

 
原文地址:https://www.cnblogs.com/sunli0205/p/5882220.html