1.实现两个网站www.wangwz.com和post.wangwz.com共用Cookies
2.添加Cookies
Cookiecookie = new Cookie("name", "wangwz");
cookie.setPath("/");//这个要设置
cookie.setDomain(".wangwz.com");//这个也要设置才能实现上面的两个网站共用
cookie.setMaxAge(365*24*60*60);//不设置的话,则cookies不写入硬盘,而是写在内存,只在当前页面有用,以秒为单位
response.addCookie(cookie);
cookie = newCookie("nick", URLEncoder.encode("王伟宗","UTF-8"));
cookie.setPath("/");
cookie.setDomain(".wangwz.com");
cookie.setMaxAge(365*24*60*60);
response.addCookie(cookie);
3.获取cookies
Cookiecookies[] = request.getCookies();
if (cookies!= null)
{
for (int i = 0; i< cookies.length; i++)
{
if (cookies[i].getName().equals("nick"))
{
System.out.println(URLDecoder.decode(cookies[i].getValue(),"UTF-8"));
}
}
}
4.删除cookies
Cookiecookies[] = request.getCookies();
if (cookies!= null)
{
for (int i = 0; i< cookies.length; i++)
{
if (cookies[i].getName().equals("nick"))
{
Cookie cookie = new Cookie("nick","");//这边得用"",不能用null
cookie.setPath("/");//设置成跟写入cookies一样的
cookie.setDomain(".wangwz.com");//设置成跟写入cookies一样的
response.addCookie(cookie);
}
}
}
========================================================
========================================================
应用实例
<%@ page contentType="text/html; charset=gb2312"language="java" import="java.util.*" errorPage=""%>
<%@ page import="java.net.URLDecoder"%> //注意导入此包
<%
Cookie cookie=new Cookie("hi","welcome");
response.addCookie(cookie);
Cookie[] cookies=request.getCookies();
if(cookies!=null){
for(int i=0;i<cookies.length;i++){
if(cookies[i].getName().equals("hi")){
StringcookieValue=URLDecoder.decode(cookies[i].getValue(),"utf-8");
out.print("hi="+cookieValue);
}
}
}else{
out.print(" no cookie");
}
%>
这里讨论的通行证机制基于Cookie,实现也比较方便。其中的关键点是Cookie的Domain属性设置,Domain属性表示Cookie信息回发的目标域,也就是接收Cookie的域,接收Cookie的域必须与发送Cookie的域一致,否则无效。比如:发送域为"blog.mysite.com",则接收域可以设为"blog.mysite.com"或"mysite.com",而"news.mysite.com"和"blog.yoursite.com"为无效接收域。要想让所有频道都能接收到Cookie,必须将Domain属性设置为不带二级域名前缀的形式,如"mysite.com"、"mysite.com.cn"、"mysite.net"等。
登录成功后向客户端发送相应Cookie,其中可以包括一些全局信息,比如用户编号、用户名等。
用户退出时删除相应Cookie,特别要注意的是,删除Cookie时也要设置正确的Domain属性。
关于该Passport机制,还有两个问题值得讨论:
a.Cookie的过期时间
有两种方案可以采用,一种是默认方式,即不设置Cookie的Expires属性,采用这种方案时,Cookie存放于内存中,在浏览器关闭前Cookie将一直存在,也就是一直处于登录状态。这种方式主要用于对信息安全要求不是很高的网站,比如娱乐休闲类网站;另一种是指定明确的过期时间,一般情况下会将用户最后一次访问网站的时间加上一个超时时间段作为过期时间,有点类似于asp中的session超时机制,这种方式主要用于对安全性要求比较高的网站,比如网上银行、电子邮箱等。
b.Cookie的信息安全
由于Cookie是以明文方式传递数据,不可避免的存在安全隐患,因此对重要数据的加密是非常有必要的。加密可以采用可逆算法,比如DES。