内部;而浏览器一旦保存了cookie,之后浏览器每次访问服务器时,都会通
过cookie请求头,将cookie信息再带回服务器中。在须要时,在服务器端能够获取请求中的cookie中的数据,从而实现某些功能。web
一、建立Cookie对象后端
Cookie c = new Cookie(String name, String value); // 建立cookie的同时须要指定cookie的名字和cookie要保存的值 // Cookie的名字一旦指定后,就没法修改!
二、将Cookie添加到response响应中跨域
response.addCookie( Cookie c ); // 将cookie添加到响应中,由服务器负责将cookie信息发送给浏览器,再由浏览器保 存到内部(能够屡次调用该方法,添加一个以上的cookie)
三、获取请求中的全部cookie对象组成的数组数组
Cookie[] cs = request.getCookies(); // 获取请求中携带的全部cookie组成的cookie对象数组,若是请求中没有携带任何 cookie,调用该方法会返回null。
四、删除浏览器中的Cookie浏览器
代码示例:安全
//建立一个名称为cart的cookie Cookie c = new Cookie("cart", ""); //设置cookie的最大生存时间为零 c.setMaxAge( 0 ); //将cookie添加到响应中,发送给浏览器 response.addCookie( c ); out.write( "成功删除了名称为cart的cookie..." );
五、Cookie的经常使用方法服务器
cookie.getName(); // 获取cookie的名字 cookie.getValue(); // 获取cookie中保存的值 cookie.setValue(); // 设置/修改cookie中保存的值(没有setName方法,由于cookie的名字没法修改) cookie.setMaxAge(); //设置cookie的最大生存时间(若是不设置,cookie默认在一次会话结束时销毁!)
六、setMaxAge方法:设置cookie的最大生存时间cookie
代码示例:网络
//建立一个Cookie对象,将商品信息保存到cookie中 Cookie cookie = new Cookie( "cart", prod ); //设置cookie的最大生存时间, 单位:秒 cookie.setMaxAge( 60*60*24 ); //将cookie对象添加到response响应中 response.addCookie( cookie );
不少网站都会使用Cookie。例如,Google会向客户端颁发Cookie,Baidu也会向客户端颁发Cookie。那浏览器访问Google会不会也携带上Baidu颁发的Cookie呢?或者Google能不能修改Baidu颁发的Cookie呢?
答案是否认的。Cookie具备不可跨域名性。根据Cookie规范,浏览器访问Google只会携带Google的Cookie,而不会携带Baidu的Cookie。Google也只能操做Google的Cookie,而不能操做Baidu的Cookie。session
Cookie的maxAge决定着Cookie的有效期,单位为秒(Second)。Cookie中经过getMaxAge()方法与setMaxAge(int maxAge)方法来读写maxAge属性。
若是maxAge属性为正数,则表示该Cookie会在maxAge秒以后自动失效。浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中。不管客户关闭了浏览器仍是电脑,只要还在maxAge秒以前,登陆网站时该Cookie仍然有效。下面代码中的Cookie信息将永远有效。
HTTP协议不只是无状态的,并且是不安全的。使用HTTP协议的数据不通过任何加密就直接在网络上传播,有被截获的可能。使用HTTP协议传输很机密的内容是一种隐患。若是不但愿Cookie在HTTP等非安全协议中传输,能够设置Cookie的secure属性为true。浏览器只会在HTTPS和SSL等安全协议中传输此类Cookie。
获取session对象:
request.getSession() // 获取一个session对象;若是在服务器内部有当前浏览器对应的session,则直接返回该session对象;若是没有对应session,则会建立一个新的session对象再返回;
Session是一个域对象,session中也保存了一个map集合,而且session中也提供了存取数据的方法,以下:
session.setAttribute(String attrName, Object attrValue); // 往session域中添加一个域属性,属性名只能是字符串类型,属性值能够是任意类型。 session.getAttribute(String attrName); // 根据属性名获取域中的属性值,返回值是一个Object类型
第一次调用request.getSession()方法时,会建立一个session对象。(当浏览器在服务器端没有对应的session时,调用request.getSession()方法服务器会建立一个session象。)
当服务器正常关闭,在关闭以前,服务器会将内部的session对象序列化保存到服务器的work目录下,变为一个文件。这个过程叫作session的钝化(序列化);再次将服务器启动起来,钝化着的session会再次回到服务器,变为服务器中的对象,这个过程叫作session的活化(反序列化)。
在一次会话范围内(获取到的都是同一个session对象)
在整个会话范围内实现数据的共享
Cookie和session都属于会话技术,均可以保存会话中产生的数据,但因为cookie和session的工做原理和特色不一样,所以二者的应用场景也不同。
因为会有愈来愈多的用户访问服务器,所以Session也会愈来愈多。为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。若是超过了超时时间没访问过服务器,Session就自动失效了。
Session的超时时间为maxInactiveInterval属性,能够经过对应的getMaxInactiveInterval()获取,经过setMaxInactiveInterval(longinterval)修改。
Session的超时时间也能够在web.xml中修改。另外,经过调用Session的invalidate()方法可使Session失效。