Session和Cookie有什么区别?

Session机制

1.Session介绍及作用                

        属于服务器端的会话技术,数据是保存在服务器的内存中,session也叫会话域对象。服务器会为每个浏览器(每个用户)都会创建独享的session对象。

        由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session。 典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。这个Session是保存在服务端的,有一个唯一标识。在服务端保存Session的方法很多,内存、数据库、文件都有。

Servlet三个作用域
请求域request一次请求内有效
会话域session一个会话内有效
上下文域servletContext全局有效,服务器启动开始,服务器关闭结束

 

 2.Session的应用场景

Session应用场景存储数据特点: 用户独享,临时性,高安全。

  3.Session的常用方法

方  法  名描    述
void setAttribute(“名字”, Object value)设置Session属性。value参数可以为任何Java Object。通常为Java Bean。value信息不宜过大
String getAttribute("名字")返回Session属性
Enumeration getAttributeNames()返回Session中存在的属性名
void removeAttribute("名字")移除Session属性
String getId()

返回Session的ID。该ID由服务器自动创建,不会重复 

 

Cookie机制

 1.Cookie介绍及作用 

        Cookie是用于在客户端浏览器存储会话数据,可以叫做浏览器缓存。Cookie 是由 Web 服务器创建,最后保存在用户浏览器(客户端)上的文本数据

        HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。即用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的会话还是用户B的会话了。要跟踪该会话,必须引入一种机制。

  客户端存储会话数据,等于使用浏览器缓存数据,可以减少服务器的内存压力,从而提升服务器性能

Cookie工作机制

 

Cookie常用的API

 

  2.Cookie的有效期

        Cookie的maxAge决定着Cookie的有效期,单位为秒(Second)。Cookie中通过getMaxAge()方法与setMaxAge(int maxAge)方法来读写maxAge属性。

/*目标:修改cookie的有效期
         *
         * 介绍:cookie默认有效期是浏览器关闭就会销毁
         * 修改cookie有效期(过期时间)的语法:
         *    cookie.setMaxAge(秒);
         *    含义:设置cookie存活多少秒,时间到了就会被销毁
         *
         * 示例:创建cookie,name="loginUser",value="admin",设置cookie过期时间为7天,输出            
           “Cookie write success”
         * */

        Cookie cookie = new Cookie("login","admin");

        cookie.setMaxAge(60*60*24*7);//七天

        response.addCookie(cookie);

如果maxAge属性为正数,则表示该Cookie会在maxAge秒之后自动失效。浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中。无论客户关闭了浏览器还是电脑,只要还在maxAge秒之前,登录网站时该Cookie仍然有效。下面代码中的Cookie信息将永远有效。

 3.Cookie的删除、修改

        Cookie并不提供修改、删除操作。如果要修改某个Cookie,只需要新建一个同名的Cookie,添加到response中覆盖原来的Cookie。

  如果要删除某个Cookie,只需要新建一个同名的Cookie,并将maxAge设置为0,并添加到response中覆盖原来的Cookie。注意是0而不是负数。负数代表其他的意义。读者可以通过上例的程序进行验证,设置不同的属性。

        //删除Cookie
        //创建Cookie, name=loginUser3
        Cookie cookie = new Cookie("loginUser3","");  //value设置为空

        //设置有限路径,必须与已有的name=loginUser3是一样的
        cookie.setPath(request.getContextPath()+"/Demo2Servlet"); 
        //路径要与创建时设置的一样

        //设置有效期为0
        cookie.setMaxAge(0);

        //输出给浏览器去覆盖
        response.addCookie(cookie);

  注意:修改、删除Cookie时,新建的Cookie除value、maxAge之外的所有属性,例如name、path、domain等,都要与原Cookie完全一样。否则,浏览器将视为两个不同的Cookie不予覆盖,导致修改、删除失败。

 4.Cookie的路径

Cookie cookie = new Cookie("loginUser","admin");     // 新建Cookie

cookie.setPath(request.getContextPath()+"/Demo2Servlet");  // 设置路径

response.addCookie(cookie);                           // 输出到客户端

设置为“/”时允许所有路径使用Cookie。path属性需要使用符号“/”结尾。name相同但domain相同的两个Cookie也是两个不同的Cookie。

Session与Cookie的区别

        会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。

两者最大的区别在于生存周期,一个是IE启动到IE关闭.(浏览器页面一关 ,Session就消失了),一个是预先设置的生存周期,或永久的保存于本地的文件。(Cookie)

1)Cookie数据存放在客户的浏览器上,Session数据放在服务器上。

2)  Session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递session_id)

3)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。

4)设置cookie时间可以使cookie过期。但是使用session-destory(),将会销毁会话。

5)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用cookie。

6)单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。(Session对象没有对存储的数据量的限制,其中可以保存更为复杂的数据类型)

   注意:

      session很容易失效,用户体验很差;

      虽然cookie不安全,但是可以加密 ;

      cookie也分为永久和暂时存在的;

      浏览器 有禁止cookie功能 ,但一般用户都不会设置;

     一定要设置失效时间,要不然浏览器关闭就消失了;

      例如:

            记住密码功能就是使用永久cookie写在客户端电脑,下次登录时,自动将cookie信息附加发送给服务端。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值