简单介绍下cookie是如何在http中运用的

来源:互联网 发布:windows 全屏快捷键 编辑:程序博客网 时间:2024/06/06 08:52

最近笔试发现很多公司都在考cookie,而我对cookie的了解仅仅知道它是一门客户端存储技术,通过http协议,通过请求在客户端(浏览器)和服务器端交互,主要作用是记录每次请求后来跟踪会话,所以在没有session之前,基本上所有的网站都是用cookie来跟踪数据的,所谓跟踪数据,其实就是记录数据,比如说你在网站上做了些操作,没有做完,关掉浏览器后下次打开,仍然保留有信息,这就是跟踪数据,记录数据,学过java-web,理解session会话机制,就很好理解了,再然后就是知道cooki是通过键值对保存数据,设置cookie的名字,设置值。然后就没啦。

接下来,大体的了解下cookie:

首先要知道为什么有cookie,用户在网站上必然要不停的向服务器发送HTTP请求来传输数据,而HTTP请求又是无状态的的协议,一旦数据交互完成后,客户端与服务端的连接就会关闭,再次交互数据需要重新建立新的连接,这意味着服务器没法跟踪上次请求记录,这时就需要cookie这种机制了,来满足HTTP无状态的不足,稍后来讲HTTP是如何携带cookie的,先解释下cookie的概念:

当服务器需要记录用户状态时,就向客户端发送一个cookie,客户端就会把cookie保存起来,当客户端再次请求服务器时,就会把cookie一同交给服务器,服务器检查cookie来辨认用户,这样就能记录每个用户的状态了。

接下来我们说下HTTP请求是如何携带cookie(网易笔试题):

有两个HTTP头部和cookie有关的:Set-cookie 和Cookie

Set-cookie 由服务器端发送,它包含在响应头部,它用于在客户端创建一个cookie

Cookie 由客户端发送,它包含在请求头部

 Set-Cookie: <name>=<value>[; <name>=<value>]...
                    [; expires=<date>][; domain=<domain_name>]
                    [; path=<some_path>][; secure][; httponly]

expris : 设置cookie的有效值,如果超过date,cookie将失效,如果没有设置这个选项,当浏览器关闭时,cookie将失效

dimain:可以访问该cookie的域名 如 .google.com 注意第一个字符必须是. 所有以google.com的结尾的域名都可以访问

path: cookie的使用路径

secure : 该cookie是否仅被使用安全协议传输(Https),默认false

httponly : 表示该cookie不能被客户端脚本(JavaScript)获得


Java 中提供了一套操作cookie的API:

http://www.cnblogs.com/xdp-gacl/p/3803033.html


Cookie cookie = new Cookie(''username","ilv"); //新建cookie

cookie.setMaxAge(integer.max_value); // 设置cookie的生命周期

如果参数为负数,表示临时性cookie,不会被写到cookie文件中,关闭窗口就失效了,如果为0表示删除这个cookie(修改cookie时用于删除它,因为cookie没有提供删除的方法),要想修改cookie只能用一个同名的cookie来覆盖,达到修改的目的,同时设置setMaxAge(0) 则表示删掉它

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

还有从客户端读取cookie时,除了name value,其它都是不可读的,只有name和value会被提交的服务器,maxAge仅仅时浏览器来判断cookie是否过期,至于path,domain就是判断那种请求属于哪个cookie

cookie.setDomain(".google.com");设置域名,决定运行时cookie访问的域名

注意:cookie是不可以跨域名的,同一个一级域名下的二级域名也是不能交互的,如www.google.com & image.google.com 无法交换,不过可以按照上面的方法设置,注意domain是以.开头的

cookie.setPath("/session/");       path属性决定允许访问Cookie的路径

cookie.setSecure(true); // 设置cookie的安全属性,true表示只能在安全协议中传递(https),但并不能保证绝对的安全,如果要提高安全性,可以在程序中对cookie 加密

response.addCookie(cookie) // 必须执行这一句


最后说下JavaScript操作cookie:

因为cookie是保存在客户端的,所以浏览器具有操作的先决条件,介绍一个常用操作:

document.write(document.cookie); // 输出本页所有的cookie

注意 A网站的JavaScript只能读取A网站的,读不了B网站的,安全问题,你懂的




阅读全文
0 0
原创粉丝点击