介绍会话技术、Cookie的API、详解、应用
什么是会话技术
基本概念 : 指用户开一个浏览器,访问一个网站 , 只要不关闭该浏览器,不管该用户点击多少个超链接,访问多少资源,直到用户关闭浏览器,整个这个过程我们称为一次会话 .
为什么我们要使用会话技术?
会话跟踪技术可以解决我们很多很多问题。
( 1 ) 在论坛登陆的时候, 很多时候会有一个小框框问你是否要自动登陆,当你下次登陆的时候就不用输入密码了
(2) 根据我以前浏览过的商品,猜我喜欢什么商品
会话跟踪技术有 Cookie 和 Session , Cookie 技术是先出现的 。我们先讲 Cookie 技术吧。
什么是 Cookie
Cookie 是由 W3C 组织提出,最早由 netscape 社区发展的一种机制
(1)网页之间的 交互是通过HTTP协议传输数据的, 而Http协议是 无状态的协议 。无状态的协议是什么意思呢? 一旦数据提交完后,浏览器和服务器的连接就会关闭,再次交互的时候需要重新建立新的连接 。
(2)服务器无法确认用户的信息,于是乎,W3C就提出了: 给每一个用户都发一个通行证,无论 谁访问 的时候都需要携带通行证,这样服务器就可以从通行证上确认用户的信息 。通行证就是Cookie
Cookie 的流程:浏览器访问服务器, 如果服务器需要记录该用户的状态,就使用 response 向浏览器发送一个 Cookie ,浏览器会把 Cookie 保存起来。当 浏览器再次访问服务器的时候,浏览器会把请求的网址连同 Cookie 一同交给服务器 。
Cookie API
( 1 ) Cookie 类用于 创建一个 Cookie 对象
( 2 ) response 接口中定义了一个 addCookie 方法,用于在响应 头增加 一个相应的 Set-Cookie 头字段
( 3 ) request 接口中定义了一个 getCookies 方法,它用于获取客户端提交的 Cookie
常用的 Cookie 方法:
( 1 ) public Cookie(String name,String value)
(2) setValue 与 getValue 方法
(3) setMaxAge 与 getMaxAge 方法
(4) setPath 与 getPath 方法
(5) setDomain 与 getDomain 方法
(6) getName 方法
简单使用Cookie
创建Cookie对象,发送Cookie给浏览器
Cookie细节
Cookie不可跨域名性
(1)很多人在初学的时候可能有一个疑问:在访问Servlet的时候浏览器 是不是把所有的Cookie都带过去给服务器 , 会不会修改了别的网站的Cookie
(2) 答案是否定的。Cookie具有不可跨域名性。浏览器判断 一个网站是否能操作另一个网站的Cookie的依据是域名 。所以一般来说, 当我访问 baidu 的时候,浏览器只会把 baidu 颁发的Cookie带过去,而不会带上google的Cookie。
Cookie保存中文
中文属于Unicode字符,英文数据ASCII字符,中文占4个字符或者3个字符,英文占2个字符。
解决: Cookie使用Unicode字符时需要对Unicode字符进行编码。
Cookie保存在硬盘的中文数据是经过编码的,那么我们在 取出Cookie的时候要对中文数据进行解码
Cookie的有效期
Cookie 的有效期是通过 setMaxAge () 来设置的 。
• 如果 MaxAge 为 正数 , 浏览器会把Cookie写到硬盘中,只要还在 MaxAge 秒 之前,登陆网站时该Cookie就有效 【不论关闭了浏览器还是电脑】
• 如果 MaxAge 为 负数 , Cookie是临时性的,仅在本浏览器内有效 ,关闭浏览器Cookie就失效了,Cookie不会写到硬盘中。Cookie默认值就是-1。 这也就为什么在我第一个例子中,如果我没设置Cookie的有效期,在硬盘中就找不到对应的文件。
• 如果 MaxAge 为 0 ,则表示 删除该Cookie 。Cookie机制没有提供删除Cookie对应的方法,把 MaxAge 设置为0等同于删除Cookie
Cookie的修改和删除
• 上面我们已经知道了Cookie机制没有提供删除Cookie的方法。其实细心点我们可以发现,Cookie机制也没有提供修改Cookie的方法。那么我们 怎么修改Cookie的值呢 ?
• Cookie存储的方式 类似于Map集合 ,如下图所示
• Cookie的名称相同,通过response添加到浏览器中,会覆盖原来的Cookie 。
• 以country为名保存的是%E4%B8%AD%E5%9B%BD,下面我 再以country为名, 把值改变 一下 。
• 现在我要删除该Cookie, 把 MaxAge 设置为0,并添加到浏览器中即可
Cookie的域名
Cookie 的 domain 属性决定运行访问 Cookie 的域名。 domain 的值规定为 “. 域名 ”
C ookie的隐私安全机制决定Cookie是不可跨域名的。也就是说www.baidu.com和www.google.com之间的Cookie是互不交接的。即使是同一级域名,不同二级域名也不能交接,也就是说:www.goole.com和www.image.goole.com的Cookie也不能访问
现在我希望 一级域名相同的网页Cookie之间可以相互访问。也就是说www.image.zhongfucheng.com可以获取到www.zhongfucheng.com的Cookie 就需要使用到domain方法。
Cookie的路径
Cookie 的 path 属性决定允许访问 Cookie 的路径
Cookie的安全属性
(1)HTTP协议不仅仅是无状态的,而且是不安全的!如果不希望Cookie在非安全协议中传输,可以 设置Cookie的secure属性为true,浏览器只会在HTTPS和SSL等安全协议中传输该Cookie 。
(2) 当然了,设置secure属性不会将Cookie的内容加密。如果想要保证安全,最好使用md5算法加密
- 点赞
- 收藏
- 关注作者
评论(0)