标签:
基本概念
对于许多人来说,都知道的是,cookie是存储在客户端的,可以用来放需要长期使用的内容,例如用户密码、用户账户等等,服务器是可以获取到cookie的内容的;而session则是存储在服务器端,通过唯一的session_id来区别用户,用于保存用户的登录状态和请求等,客户是不能获取到其内容的。
这对于许多人来说都是比较基础的内容,也是表现形式上的区别,在这里我们深入的了解一下两者。
为什么需要cookie?
对于web程序,有一个需要考虑的问题是如何跟踪用户的会话,照常理来说,一个用户的行为只能对应于一个会话,比如开发购物车应用,就要考虑到用户的购物车中的内容,一个用户的购物车总不能装的是别人的商品吧?跟踪用户的会话就是用来区分不同用户的各自所挑选的商品。
但是Web应用是基于HTTP协议来传输数据的,而HTTP协议是无状态的,在完成传输数据之后,客户端与服务器端的连接就会关闭,对于不同用户发生“将商品放入购物车”的动作时,不能够判断哪一件商品对应哪一位用户。在这里需要使用cookie,来解决HTTP协议在跟踪会话上的不足。
cookie是服务器端给客户端分发的一种凭证,客户端要请求服务,就需要在发送数据时的同时发送cookie,服务器端通过识别cookie的内容,得知用户的身份,就可以知道用户的购物车是那一辆,再将商品放进去就可以了。
cookie的内容
要查看cookie可以在地址栏输入 javascript: alert(document.cookie); 就可以看到网站分发的cookie了。下面是百度上的cookie内容,在有使用cookie的网站使用才可行。
cookie的内容就是这样的字符串,服务器通过读取这样的长长的加密过的cookie来获取用户的信息,这里有BAIDUID(即我的百度账号),以及其他的信息。
cookie的分类
实际上cookie也分为两种,分别是停留在浏览器所占内容的临时性的cookie,在页面窗口关闭之后就被删除,被称为session cookie;而另外一种是通过存放在硬盘空间中长期存在的cookie,这种cookie称为persistent cookie,也就是我们通常意义上所讲的cookie。
通常session是依赖于session cookie来与客户端交互的,当然session的工作方式不仅仅限于这一种,还有其他的方式在下文会说到。
cookie的属性
以下表格是cookie的比较常用的属性及其说明:
属性名 | 描述 |
String name | 该Cookie的名称。Cookie一旦创建,名称便不可更改 |
Object value | 该Cookie的值。如果值为Unicode字符,需要为字符编码。如果值为二进制数据,则需要使用BASE64编码 |
int maxAge | 该Cookie失效的时间,单位秒。如果为正数,则该Cookie在maxAge秒之后失效。如果为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie。如果为0,表示删除该Cookie。默认为–1 |
boolean secur | 该Cookie是否仅被使用安全协议传输。安全协议。安全协议有HTTPS,SSL等,在网络上传输数据之前先将数据加密。默认为false |
String path | 该Cookie的使用路径。如果设置为“/sessionWeb/”,则只有contextPath为“/sessionWeb”的程序可以访问该Cookie。如果设置为“/”,则本域名下contextPath都可以访问该Cookie。注意最后一个字符必须为“/” |
String domain | 可以访问该Cookie的域名。如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该Cookie。注意第一个字符必须为“.” |
要注意到cookie的名称是无法修改的,同时cookie并不提供修改和删除的操作,如果说要修改cookie 的内容,则可以新建一个同名的cookie覆盖掉原来的即可;要删除cookie的话则新建一个同名的cookie,并设置其maxAge为0即可。
需要考虑cookie中maxAge的一些特殊值所代表的含义,如果maxAge为负值,则表示cookie仅仅在当前浏览器窗口以及其打开的子窗口中有效,关闭时则失效,这也是cookie的默认maxAge值;如果maxAge为0,则说明删除该cookie,由于并没有删除cookie的操作,这里是需要通过cookie的maxAge来进行删除操作的。
seesion的出现
待补充
标签:
原文地址:http://www.cnblogs.com/s1nker/p/4876284.html