暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Cookie简介和在Java中的应用

万方技术 2017-06-06
668

概述


Cookie 技术产生源于 HTTP 协议在互联网上的急速发展。随着互联网的深层次发展,带宽等限制不存在了,人们需要更复杂的互联网交互活动,就必须同服务器保持活动状态。于是,在浏览器发展初期,为了适应用户的需求,技术上推出了各种保持 Web 浏览状态的手段,其中就包括了 Cookie 技术。


Cookie 可以翻译为“小甜品,小饼干” ,Cookie 在网络系统中几乎无处不在,当我们浏览以前访问过的网站时,网页中可能会出现 :你好 XXX,这会让我们感觉很亲切,就好像吃了一个小甜品一样。这其实是通过访问主机中的一个文件来实现的,这个文件就是 Cookie。在 Internet 中,Cookie 实际上是指小量信息,是由 Web 服务器创建的,将信息存储在用户计算机上的文件。


Cookie在互联网上的普遍应用场景


下面简单介绍三种Cookie的普遍应用:

(1) 淘宝网上获取到上一次登录时的用户名,当然如果要进行相关账号的操作需要重新输入密码保证账号信息安全。

(2) “未来X天自动登录”和“下次自动登录”等功能。如“万方数据知识服务新平台”的“统一登录系统”

(3) Cookie是单点登录系统的实现依据。在这里简单介绍一下单点登录,单点登录的概念简单来说就是:在一个网站登录之后,可以在另外一个网站获取到登录的用户信息,用来举个例子就是“淘宝网”和“天猫网”,我们在淘宝网登录之后在天猫也能获取到用户信息,可是他们本身并不是一个网站。用字面意思来理解就是,在一个点登录之后,另外的点都可以保持登录状态了。

          CAS(Central Authentication Service 中央认证服务)就是实现单点登录的一个开源项目,它实现流程简单来说就是:比如有两个站点A和B,我们在A站点登录之后,会生成一个登录的票据,这个票据就是保存在Cookie中,我们在访问B站点时,读取到Cookies中的这个票据信息,就可以拿着票据信息去查找登录信息,读取到了登录信息就证明已经登录了,这个时候B站点就会保存我们的登录状态,从而达到我们同时在A和B进行登录的效果。

           在CAS单点登录的过程中,保存票据的方式是使用Cookie,所以说Cookie是单点登录系统的实现依据。


怎么在查看Cookie?

Cookie可以在浏览器上查看到,同时因为Cookie是保存在本地的数据,我们也可以找到浏览器上保存的文件,首先我们看一下如何在浏览器中查看Cookie。


由于Cookie的相关查询和存储都是浏览器做的,所以每个浏览器有不同的查询Cookie方式,下面拿Firefox浏览器举例,如果要查看当前页面生效的Cookie,在当前页面按F12——》点击Cookie并刷新页面即可。

同时浏览器一般会有一个Cookie管理的页面,便于Cookie查看和管理,我们可以在这个页面进行查看或搜索所有Cookie,我们点击Firefox浏览器上方菜单栏中“工具”——》页面信息。

然后点击弹出窗口中的“安全”——》“查看Cookie”

然后我们就可以查看所有的Cookie,并且对其进行搜索、删除等操作了


那么Cookie在本地保存是什么样子呢?


下面我们来见一见Cookie到底保存为什么样子吧,拿IE浏览器举例,IE浏览器保存Cookie的地址为本地的:%APPDATA%\Microsoft\Windows\Cookies\ 文件夹中。我们尝试访问一下这个路径。拿我本机举例,可以看到下图的结果:

原来IE浏览器将Cookie以txt格式存储,那么随便打开一个Cookie文件看一下:

Cookie一般都是经过加密之后存储到本地的,果然如此。那么话不多说,我同时找到了Firefox浏览器的存储Cookie的地址,发现文件如下图所示:

从而得知,火狐管理Cookie的方式是用轻量级的数据库Sqlite管理的。


Cookie的格式

Cookie由Key和Value组成,其属性里既有标准的Cookie变量,也有用户自己创建的变量,属性中变量是用“变量=值”形式来保存。

根据Netscape公司的规定,Cookie格式如下:

Set-Cookie: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE

NAME=VALUE:不可缺省。NAME是该Cookie的名称,VALUE是该Cookie的值。

Expires=DATE:Expires确定了Cookie有效终止日期。该属性值DATE必须以特定的格式来书写:星期几,DD-MM-YY HH:MM:SS GMT,GMT表示这是格林尼治时间。反之,不以这样的格式来书写,系统将无法识别。该变量可省,如果缺省时,则Cookie的属性值不会保存在用户的硬盘中,而仅仅保存在内存当中,Cookie文件将随着浏览器的关闭而自动消失。 

Domain=DOMAIN-NAME:Domain该变量是一个只写变量,它确定了哪些Internet域中的Web服务器可读取浏览器所存取的Cookie,即只有来自这个域的页面才可以使用Cookie中的信息。这项设置是可选的,如果缺省时,设置Cookie的属性值为该Web服务器的域名。

Path=PATH:Path属性定义了Web服务器上哪些路径下的页面可获取服务器设置的Cookie。一般如果用户输入的URL中的路径部分从第一个字符开始包含Path属性所定义的字符串,浏览器就认为通过检查。如果Path属性的值为“/”,则Web服务器上所有的WWW资源均可读取该Cookie。同样该项设置是可选的,如果缺省时,则Path的属性值为Web服务器传给浏览器的资源的路径名。
 

可以看出我们借助对Domain和Path两个变量的设置,即可有效地控制Cookie文件被访问的范围。

Secure:在Cookie中标记该变量,表明只有当浏览器和Web Server之间的通信协议为加密认证协议时,浏览器才向服务器提交相应的Cookie。当前这种协议只有一种,即为HTTPS。


Java中的Cookie操作

Cookie的操作在Java中得到了很完善的支持,同时Java对其的封装较好,大大方便了我们的编程。


在进行Web开发时,Cookie这个对象Java也有对应的类:

javax.servlet.http.Cookie;

下面是对Cookie操作的示例代码:


以上就是关于Cookie的相关知识,小伙伴们学会了吗?

文章转载自万方技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论