您的位置:首页 > 其它

cookie和session的理解

2016-10-07 23:52 239 查看
昨天跟前天讲了HttpServletRequest,HttpServletResponse,Cookie, Seesion,怎么说呢, 觉得还是cookie和session比较难些,request与response到不怎么难的,主要是因为使用cookie与session实现的功能有点多了,比如:使用Cookie获得商品浏览记录,买过电脑的童鞋都应该知道,我们买电脑之前是不是都上网看看那款电脑的性价比高,你在浏览电脑的同时,他会将你电脑的电脑存到一个浏览记录里,你从这个浏览记录中可以看到你浏览了那些电脑。而session呢,它实现的功能就有点多了,比如:著名购物车就是用session实现的,自动登录,在服务器端还可以使用session来做放置表单重复提交。做的东西一多感觉就有点小难了。。。
1、cookie:

cookie是客户端技术,当用户访问服务器时,服务器会为每个回话创建一个session,在创建完之后向客户端写入一个cookie,cookie name:JSESSIONID, cookie: session.getId(), cookie默认是会话级别的,他储存在浏览器的内存中,当浏览器关闭时,会话级别的cookie也就被删除,但是也可以通过调用cookie的setMaxAge方法设置它的有效时间,利用这一点可以让cookie帮我们干一些事情,干什么事情呢?比如:获得上次访问某个站点的时间; 获得商品浏览记录。
使用Cookie获得商品浏览列表和上次访问的时间  (要想cookie记住用户浏览记录,则必须将创建的cookie添加到响应头上)
使用cookie获得商品浏览记录:
1、得到所有的cookie,并检查其中有没有目标cookie

2、若在所有得到的cookie中,没有检查到目标cookie, 那么就创建一个目标cookie,并设置他的有效时间。这是唯一能保证保证cookie能记住浏览信息的方法。因为cookie默认是会话级别的,它保存在浏览器的缓存中,当关闭浏览器时,cookie也就随之消失了 
使用cookie删除浏览记录:

1、创建一个cookie,区别标示名与目标cookie的区别标示名相同,并设置他的有效时间为0, 例如:Cookie cookie = new Cookie("visite", ""); cookie.setMaxAge(0);

这样创建了一个cookie,用它来直接覆盖掉目标cookie。
cookie声明周期:用户访问服务器, 服务器创建session,向客户端写入一个cookie,会话级别的cookie,在推出浏览器时,被删除;否则,有效期过了也别删除。
2、session
session是服务器端技术,当用户访问服务器时,服务器会把用户的数据保存到一个单独的session中。
session声明周期:用户访问服务器时,服务器首先会检索请求中有没有session的一个标示号成为JESSIONID,若有则服务器就会检索出相应的session,若没有就会重新创建一个session可能是服务器删除了该用户的session对象),session是在调用getSession(true)方式时创建。当服务器被关闭,session超时或者调用了session的invalidate方法销毁session在这三种情况下,session对象会被销毁
我们使用session实现自动登录、购物车、防止表单重复提交功能:
购物车:

[java] view
plain copy

    response.setCharacterEncoding("utf-8");  

        response.setContentType("text/html;charset=UTF-8");  

        PrintWriter out = response.getWriter();  

        String id = request.getParameter("id");  

        Map<String, Integer> map = null;  

        //先创建一个session,  

        HttpSession session = request.getSession();  

          

        //在session中检查有没有Map集合  

        map = (Map<String, Integer>) session.getAttribute("map");  

        //若Map集合为空,那么重新创建一个,然后将这个Map集合设置到session中  

        if (map == null) {  

            map = new HashMap<String, Integer>();  

            session.setAttribute("map", map);  

        }  

        Integer count = map.get(id);  

        if (count == null) {  

            //当商品被第一次浏览,则count = 1  

            count = 1;  

System.out.println("null count = 1");             

        } else {  

              

            //当商品已经被浏览过了,则count++  

System.out.println(" not null count ++");     

            count ++;  

        }  

        map.put(id, count);  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: