Servlet学习-会话技术cookie

点击打开链接

会话:用户开一个浏览器,访问一个网站,只要不关闭该浏览器,不管该用户点击多少个超链接,访问多少资源,直到用户关闭浏览器,整个这个过程我们称为一次会话。

为什么要使用cookie

1.记录用户的事件

2.浏览历史记录

3.用户名和密码的记录

 

复制代码
//createcookie.java
//
创建cookie(api) Cookie cookie=new Cookie("name","cookietest"); //设置cookie的生命周期 cookie.setMaxAge(3600); //把cookie信息写回给浏览器 response.addCookie(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:

1.cookie是在服务端创建的

2.cookie是保存在浏览器这端的

3.cookie的生命周期可以通过cookie.setMaxAge();如果不设置,关闭浏览器就destroy了

4.cookie可以被多个浏览器共享

5.怎么理解:把cookie假设成一张表  名字(String):值(String)

  所有共享这张表,名字如果重复了就会替换掉存在的cookie值。

6.一个WEB应用可以保存多个cookie

7.cookie存放的时候是以明文方式存放的,因此安全比较低,我们可以通过加密后保存,可以用md5(不可逆)算法加密(想起了base64),经过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;
    }
复制代码

 cookie的细节:

1,,一个web应用可以给浏览器发送多个cookie,一个浏览器可以存储多个web应用提供的cookie。一般只允许存放300个cookie,每个web应用最多放 20个,每个cookie大小4KB,因此不会塞满硬盘,也不会被用作“拒绝服务”攻击手段。

2,cookie的默认生命周期是会话级别的,关闭浏览器后就被删除,可以通过setMaxAge()设置cookie 的生命周期。setMaxAge(0)删除该cookie:要保持path一致,否则无法删除,

setMaxAge(负数),则该cookie是会话级别的。

cookie.setMaxAge(0);
response.addCoookie(cookie);//必须带,相当于执行语句

 如果该cookie只有一个值,则删除cookie后文件会被删除,否则文件不会被删除。

复制代码
//如果cookie存放中文
//创建cookie(api)
String val=java.net.URLEncoder.encode("中文","utf-8");
Cookie cookie=new Cookie("name",val);


//读取有中文的cookie要用base64进行解码
String val=java.net.URLDecoder.decode(cookie.getValue(),"utf-8");
复制代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值