会话技术
会话技术:从浏览器开始访问服务器,到关闭浏览器,这期间发生了许多次请求和响应,这个过程就叫做一次会话。
Cookie 和 Session 都是处理会话技术的两种具体实现,Cookie将数据保存在客户端,Session将数据保存在服务器端。
Cookie技术
1.Cookies是存储在客户机的文本文件,可以保存一系列的信息。通常服务器有三个步骤来识别不同的客户机:
服务器脚本发送一系列cookies至浏览器。比如名字,年龄,ID号码等等。
浏览器在本地机中存储这些信息。
当下一次浏览器发送任何请求至服务器时,它会同时将这些cookies信息发送给服务器,然后服务器使用这些信息来识别用户或者做某些其它事情。
2.Cookies通常在HTTP信息头中设置(虽然JavaScript能够直接在浏览器中设置cookies)。在JSP中,设置一个cookie需要发送如下的信息头给服务器:
HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name=xyz; expires=Friday, 04-Feb-07 22:03:38 GMT;
path=/; domain=tutorialspoint.com
Connection: close
Content-Type: text/html
Set-Cookie信息头包含一个键值对,一个GMT(格林尼治标准)时间,一个路径,一个域名。键值对会被编码为URL。有效期域是个指令,告诉浏览器在什么时候之后就可以清除这个cookie。
3.如果浏览器被配置成可存储cookies,那么它将会保存这些信息直到过期。如果用户访问的任何页面匹配了cookie中的路径和域名,那么浏览器将会重新将这个cookie发回给服务器。浏览器端的信息头长得就像下面这样:
GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126
Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name=xyz
4.Cookie 对象常用的方法
public void setDomain(String pattern) 设置cookie的域名,比如w3cschool.cc
public String getDomain() 获取cookie的域名,比如w3cschool.cc
public void setMaxAge(int expiry) 设置cookie有效期,以秒为单位,默认有效期为当前session的存活时间。如果不设置,那么只在内存中处理此Cookie,不保存到磁盘,浏览器关闭后消失。
public int getMaxAge() 获取cookie有效期,以秒为单位,默认为-1 ,表明cookie会活到浏览器关闭为止
public String getName() 返回 cookie的名称,名称创建后将不能被修改
public void setValue(String newValue) 设置 cookie的值
public String getValue() 获取cookie的值
public void setPath(String uri) 设置cookie 的路径,默认为当前页面目录下的所有URL,还有此目录下的所有子目录
public String getPath() 获取cookie 的路径
public void setSecure(boolean flag) 指明cookie是否要加密传输
public void setComment(String purpose) 设置注释描述 cookie的目的。当浏览器将cookie展现给用户时,注释将会变得非常有用
public String getComment() 返回描述cookie目的的注释,若没有则返回null
5.使用JSP设置cookie包含三个步骤:
(1)创建一个Cookie对象: 调用Cookie的构造函数,使用一个cookie名称和值做参数,它们都是字符串。
Cookie cookie = new Cookie("key","value");
注意,名称和值中都不能包含空格或者如下的字符:
[ ] ( ) = , " / ? @ : ;
(2)设置有效期:调用setMaxAge()函数表明cookie在多长时间(以秒为单位)内有效。下面的操作将有效期设为了24小时。
cookie.setMaxAge(60*60*24);
(3) 将cookie发送至HTTP响应头中:调用response.addCookie()函数来向HTTP响应头中添加cookies。
response.addCookie(cookie);
6.删除Cookies
删除cookies非常简单:从request中取得已经存在的cookie,将其有效期设置为0,然后再重新添加进响应头中。
7.实例演示显示上次访问时间
Cookie cookie = null;
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie c : cookies) {
if (c != null && LAST_VISIT_TIME.equals(c.getName())) {
cookie = c;
break;
}
}
}
if (cookie != null) {
try {
String time = cookie.getValue();
String s = "上次访问的时间是:" + new Date(Long.parseLong(time)).toString();
response.getOutputStream().write(s.getBytes());
} catch (Exception e) {
}
} else {
response.getOutputStream().write("欢迎您光临本站!".getBytes());
}
cookie = new Cookie(LAST_VISIT_TIME, new Date().getTime() + "");
response.addCookie(cookie);