cookie.setPath("/");
cookie.setMaxAge(60 * 60 * 24 * 14);
我主要使用者三个,一般如果仅仅是单个工程,我估计也不需要cookie,一般session就可以了,这个主要用于多工程 ,而且用于跨域访问,我也不知道自己理解的对不对,大家自己判断吧。先说cookie.setMaxAge(60 * 60 * 24 * 14);这个设置的是cookie的失效时间,不过如果想关闭浏览器就想让cookie没有的话,建议不要设置它,我就因为设置了它,造成不登录也能显示名称,造成了bug。
再说domain和path问题,cookie一般与域名,或者说网站,网址有关,一个网站对应一个域名,因此如果想共享cookie的话,就不能让他们在自己的下面,我在进行本机测试的时候使用127.0.0.1是没有问题的,但是如果过个工程,多个域名,就需要cookie.setDomain(".baidu.com");(必须有.)而且要记得,跨域名访问,必须这几个域名之间有公共部分,
#127.0.0.1 www.wzcredit.xin
#192.168.1.31 www.zhidao.wzcredit.xin
例如向上面,setDomain(".wzcredit.xin") 不知道为什么晚上总是说,最后cookie放到的是服务器上,这我就不明白了(个人觉得最后放到的是使用者的机器上的)。
只要设置了domain path()一般就可以跨域了
public static Cookie addCookie(WzzxCompany wzzxCompany) throws UnsupportedEncodingException{
String cookieValue = URLEncoder.encode(wzzxCompany.getCompanyName(), "utf-8")+","+wzzxCompany.getCompanyLoginname()+","+wzzxCompany.getCompanyPwd();
Cookie cookie = new Cookie(USER_COOKIE, cookieValue);
// cookie.setDomain("127.0.0.1");
cookie.setDomain(".wzcredit.xin");
cookie.setPath("/");
// URLDecoder.decode(cookies[i].getName(),"utf-8");
// cookie.setMaxAge(60 * 60 * 24 * 14);
return cookie;
//ServletActionContext.getResponse().addCookie(cookie);//使用的时候需要增加这个部分
}
public static boolean getCookie(HttpServletRequest request) {
Cookie[] cookies = request.getCookies();
System.out.println("cookies: " + cookies);
if (cookies != null) {
for (Cookie cookie : cookies) {
System.out.println("cookie: " + cookie.getName());
if (CookieUtils.USER_COOKIE.equals(cookie.getName())) {
String value = cookie.getValue();
if (StringUtils.isNotBlank(value)) {
return true;
}
}
}
}
return false;
}
// 删除cookie
public static Cookie delCookie(HttpServletRequest request) {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (USER_COOKIE.equals(cookie.getName())) {
cookie.setValue("");
cookie.setMaxAge(0);
return cookie;
}
}
}
return null;
}
前台接收端
$.cookie(cookiename);就能收到数据了,其实cookie很想map,不过你有时候也得把他想成map外面加一层网址(域名)
下面是我在网上搜索到的资料
http://blog.sina.com.cn/s/blog_7042a6c101013dk7.html
正常的cookie只能在一个应用中共享,即一个cookie只能由创建它的应用获得。
1.可在同一应用服务器内共享方法:设置cookie.setPath("/");
就可以在webapp_b下面获取到cas设置的cookie了。
4)设置cookie.setPath("/webapp_b/jsp")或者cookie.setPath("/webapp_b/jsp/")的时候,只有在webapp_b/jsp下面可以获得cookie,在webapp_b下面但是在jsp文件夹外的都不能获得cookie。
5)设置cookie.setPath("/webapp_b");,是指在webapp_b下面才可以使用cookie,这样就不可以在产生cookie的应用webapp_a下面获取cookie了
6)有多条cookie.setPath("XXX");语句的时候,起作用的以最后一条为准。
2.跨域共享cookie的方法:设置cookie.setDomain(".jszx.com");
2.跨域共享cookie的方法:设置cookie.setDomain(".jszx.com");
A机所在的域:home.langchao.com,A有应用webapp_a
B机所在的域:jszx.com,B有应用webapp_b
1)在webapp_a下面设置cookie的时候,增加cookie.setDomain(".jszx.com");,这样在webapp_b下面就可以取到cookie。
2)输入url访问webapp_b的时候,必须输入域名才能解析。比如说在A机器输入:http://lc-bsp.jszx.com:8080/webapp_b,可以获取webapp_a在客户端设置的cookie,而B机器访问本机的应用,输入:http://localhost:8080/webapp_b则不可以获得cookie。
3)设置了cookie.setDomain(".jszx.com");,还可以在默认的home.langchao.com下面共享
疑问: 为什么我写cookie设置的城都是localhost,URL里也用localhost,但是cookie写不进去??当然,也读不出来了。测试环境TOMCAT5.5 IE6.0
指定可访问cookie的路径
默认情况下,如果在某个页面创建了一个cookie,那么该页面所在目录中的其他页面也可以访问该cookie。如果这个目录下还有子目录,则在子目录中也可以访问。例如在www.xxxx.com/html/a.html中所创建的cookie,可以被www.xxxx.com/html/b.html或www.xxx.com/html/ some/c.html所访问,但不能被www.xxxx.com/d.html访问。
为了控制cookie可以访问的目录,需要使用path参数设置cookie,语法如下:
document.cookie="name=value; path=cookieDir";
其中cookieDir表示可访问cookie的目录。例如:
document.cookie="userId=320; path=/shop";
就表示当前cookie仅能在shop目录下使用。
如果要使cookie在整个网站下可用,可以将cookie_dir指定为根目录,例如:
document.cookie="userId=320; path=/";
指定可访问cookie的主机名
和路径类似,主机名是指同一个域下的不同主机,例如:www.google.com和gmail.google.com就是两个不同的主机名。默认情况下,一个主机中创建的cookie在另一个主机下是不能被访问的,但可以通过domain参数来实现对其的控制,其语法格式为:
document.cookie="name=value; domain=cookieDomain";
以google为例,要实现跨主机访问,可以写为:
document.cookie="name=value;domain=.google.com";
这样,所有google.com下的主机都可以访问该cookie。
综合示例:构造通用的cookie处理函数
cookie的处理过程比较复杂,并具有一定的相似性。因此可以定义几个函数来完成cookie的通用操作,从而实现代码的复用。下面列出了常用的cookie操作及其函数实现。
1.添加一个cookie:addcookie(name,value,expireHours)
该函数接收3个参数:cookie名称,cookie值,以及在多少小时后过期。这里约定expireHours为0时不设定过期时间,即当浏览器关闭时cookie自动消失。该函数实现如下:
<script language="JavaScript"type="text/JavaScript">
<!--
function addcookie(name,value,expireHours){
}
//-->
</script>
2.获取指定名称的cookie值:getcookie(name)
该函数返回名称为name的cookie值,如果不存在则返回空,其实现如下:
<script language="JavaScript"type="text/JavaScript">
<!--
function getcookie(name){
}
//-->
</script>
3.删除指定名称的cookie:deletecookie(name)
该函数可以删除指定名称的cookie,其实现如下:
<script language="JavaScript"type="text/JavaScript">
<!--
function deletecookie(name){
}
//-->
</script>
也可以用另一种网上流传的:
<script language="JavaScript"type="text/JavaScript">
//写cookies函数 作者:翟振凯
function SetCookie(name,value)//两个参数,一个是cookie的名子,一个是值
{
}
functiongetCookie(name)//取cookies函数
{
}
function delCookie(name)//删除cookie
{
}
SetCookie ("xiaoqi", "3")
alert(getCookie('xiaoqi'));
</script>