struts2 cookie的使用

这两天在做cms与后台的连接部分,也不是很懂,网友湖水没了(www.publiccms.com的作者),告诉我可以通过cookie的方式,做到2个工程之间传递参数,于是在网上搜索了资料,cookie的使用,也就是基本的使用方式,javax.servlet.http.Cookie的使用,cookie的使用主要就几个set方法cookie.setDomain("127.0.0.1");
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("/");

  本机tomcat/webapp下面的有2个应用:webapp_a 和webapp_b

 1)原来在webapp_a下面设置的cookie,在webapp_b下面获取不到,path默认是产生cookie的应用的路径。

 2)若在webapp_a下面设置cookie的时候,增加一条cookie.setPath("/");或者cookie.setPath("/webapp_b");

就可以在webapp_b下面获取到cas设置的cookie了。

 3)此处的参数,是相对于应用服务器存放应用的文件夹的跟目录而言的(比如tomcat下面的webapp),因此cookie.setPaht("/");之后,可以在webapp文件夹下的所有应用共享cookie,而cookie.setPath("/webapp_b/");是指cas应用设置的cookie只能在webapp_b应用下的获得,即便是产生这个cookie的webapp_a应用也不可以。

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.htmlwww.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){
     var cookieString=name+"="+escape(value);
     //判断是否设置过期时间
     if(expireHours>0){
            var date=new Date();
            date.setTime(date.getTime+expireHours*3600*1000);
            cookieString=cookieString+"; expire="+date.toGMTString();
     }
     document.cookie=cookieString;
}
//-->
</script>
2.获取指定名称的cookie值:getcookie(name)
该函数返回名称为name的cookie值,如果不存在则返回空,其实现如下:
<script language="JavaScript"type="text/JavaScript">
<!--
function getcookie(name){
     var strcookie=document.cookie;
     var arrcookie=strcookie.split("; ");
     for(var i=0;i<arrcookie.length;i++){
           var arr=arrcookie[i].split("=");
           if(arr[0]==name)return arr[1];
     }
     return "";
}
//-->
</script>
3.删除指定名称的cookie:deletecookie(name)
该函数可以删除指定名称的cookie,其实现如下:
<script language="JavaScript"type="text/JavaScript">
<!--
function deletecookie(name){
      var date=new Date();
      date.setTime(date.getTime()-10000);
      document.cookie=name+"=v; expire="+date.toGMTString();
}
//-->
</script>
 

也可以用另一种网上流传的:

<script language="JavaScript"type="text/JavaScript">

//写cookies函数 作者:翟振凯
function SetCookie(name,value)//两个参数,一个是cookie的名子,一个是值
{
    var Days =30; //此 cookie 将被保存 30 天
    varexp  = newDate();    //newDate("December 31, 9998");
   exp.setTime(exp.getTime() + Days*24*60*60*1000);
   document.cookie = name + "="+ escape (value) + ";expires=" +exp.toGMTString();
}
functiongetCookie(name)//取cookies函数       
{
    var arr =document.cookie.match(new RegExp("(^|)"+name+"=([^;]*)(;|$)"));
    if(arr != null) return (arr[2]); return null;

}
function delCookie(name)//删除cookie
{
    var exp =new Date();
   exp.setTime(exp.getTime() - 1);
    varcval=getCookie(name);
   if(cval!=null) document.cookie= name +"="+cval+";expires="+exp.toGMTString();
}

SetCookie ("xiaoqi", "3")
alert(getCookie('xiaoqi'));
</script>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值