(13)会话和cookie技术

来源:互联网 发布:linux 删除tomcat日志 编辑:程序博客网 时间:2024/06/01 21:54

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

二、会话过程中要解决的一些问题?
每一个用户在使用浏览器与服务器进行会话的承重,不可避免产生一些数据,服务器要想办法为每个用户保存用户的数据。
比如:多个用户点击超链接通过一个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);        }    }