(13)会话和cookie技术

一、什么是会话?
会话可简单理解为:用户开一个浏览器访问某个网站,只要不关闭该浏览器,不管该用户点击多少个超链接,访问多少个资源,直到用户关闭浏览器,整个过程,称为一次会话。

二、会话过程中要解决的一些问题?
每一个用户在使用浏览器与服务器进行会话的承重,不可避免产生一些数据,服务器要想办法为每个用户保存用户的数据。
比如:多个用户点击超链接通过一个servlet各自购买了一个商品,服务器应该想办法把每一个用户购买的商品保存在各自的地方,以便于这些用户点击结账servlet时,结账servlet可以得到用户各自购买的商品为用户结账。
如何保存用户上次登录时间?
如何显示用户在淘宝上的浏览商品,有时不需要登陆,就可以看到。
如何把登陆的用户名和密码电脑,下次登陆,不需要重新输入。

解决之道就是cookie技术
三、cookie技术
cookie是客户端技术,服务器在客户端保存的信息,比如登录名,密码就是cookie,这些信息就像小甜饼一样,服务器端在需要的时候可以从客户端读取,保存在客户端的浏览器缓存目录下

cookie原理示图
这里写图片描述
①cookic读取:只能读取同一个项目下的cookie
②cookie是在服务器创建,保存在浏览器端
③cookie的生命周期可以通过cookie.setMaxAge(200);
如果不设置,则生命周期当浏览器关闭时,就消亡
④cookie可以被多个浏览器共享
⑤理解:键值对构成的表。
⑥一个web应用可以保存多个cookie
⑦cookie存放的时候是以明文方式存放,因此安全性较低,我们可以通过加密后保存

补讲一个md5算法,以后的密码要加密存放,在验证密码时,对用户输入的密码,进行MD5加密
然后到数据库中进行验证。


 public final class MD5
  { 
   public static final String MD5(String s)
   {
     char[] hexDigits = { 
       '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 
       'e', 'f' };
     try {
       byte[] strTemp = s.getBytes();
       MessageDigest mdTemp = MessageDigest.getInstance("MD5");
       byte[] md = mdTemp.digest();
       int j = md.length;
       char[] str = new char[j * 2];
               int k = 0;
       for (int i = 0; i < j; ++i) {
         byte byte0 = md[i];
         str[(k++)] = hexDigits[(byte0 >>> 4 & 0xF)];
        str[(k++)] = hexDigits[(byte0 & 0xF)];
      }
      return new String(str);
    } catch (Exception e) {
    }
     return null;
   }
}

四、cookie应用一:得到上次登录的时间

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        Cookie[] cookies=request.getCookies();

        boolean b=false;//假设没有这个cookie,当找到时,将标记改变
        //假设保存的上次登录时间的cookie"lasttime" "2011-11-11 12:12:12"

        //这里我们考虑一种情况:用户第一次登录‘您是第一次登录’
        if(cookies!=null)//首先保证有cookie,才遍历
        {
            for(Cookie cookie:cookies)
            {
                //取出name
                String name=cookie.getName();
                if("lasttime".equals(name)){
                    //
                    out.println("您上次登录的时间是:"+cookie.getValue());
                    SimpleDateFormat  simpledateformat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    String nowTime= simpledateformat.format(new Date());
                     cookie.setValue(nowTime);//设置新的cookie值
                     cookie.setMaxAge(7*3600*24);//保留一周
                     response.addCookie(cookie);
                    //显示

                    b=true;
                    break;

                }

            }
        }
        if(!b){
            //没有找到
            out.println("您是第一次登录");

            //
            SimpleDateFormat  simpledateformat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String nowTime= simpledateformat.format(new Date());
            //把当前日期保存cookie
            Cookie cookie=new Cookie("lasttime",nowTime);
            cookie.setMaxAge(7*3600*24);//保留一周
            response.addCookie(cookie);


        }
    }
posted @ 2017-09-01 23:53  测试开发分享站  阅读(85)  评论(0编辑  收藏  举报