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