同域名下,不同项目的cookie共享

做项目的时候遇到个问题就是:因为前台和后台是独立开的(但在同一域名下),前台登录后设置了cookie,然后直接跳到后台,在后台却无法获取到设置的cookie,导致后台退出时,无法清除cookie,前台还是登录的状态。

产生这个问题的原因是cookie的作用域问题,假如本地服务器下的/webapp下面有两个应用:webapp_a和webapp_b, 
1)在webapp_a下面设置的cookie,在webapp_b下面获取不到,因为cookie的作用域默认是产生cookie的应用的路径。 

2)若在webapp_a下面设置cookie的时候,增加一条cookie.setPath("/");或者cookie.setPath("/webapp_b/"); 
就可以在webapp_b下面获取到设置的cookie了。 

3)cookie.setPath这个参数;是相对于应用服务器存放应用的文件夹的根目录而言的(比如服务器下面的webapp),因此cookie.setPath("/")之后,可以在webapp文件夹下的所有应用共享cookie,而cookie.setPath("/webapp_b/")是指应用设置的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");语句的时候,起作用的以最后一条为准。 

所以解决方法就是:在设置cookie的时候加个path="/"上去。

具体代码:

//设置cookie时间以秒为单位
function setCookie(c_name,value,expireseconds){
    var exdate=new Date();
    exdate.setTime(exdate.getTime()+expireseconds * 1000);
    document.cookie=c_name+ "=" +escape(value)+
    ((expireseconds==null) ? "" : ";expires="+exdate.toGMTString())+";path=/";
}

注意:设置完cookie后,删除的时候也应该相应的加上path参数,才能删除掉cookie

具体代码:

//删除cookie
function delCookie(key){ 
    var date = new Date(); //获取当前时间
    date.setTime(date.getTime()-10000); //将date设置为过去的时间
    document.cookie = key + "=v; expires =" +date.toGMTString()+";path=/";	//设置cookie
 }

获取cookie代码:

//获取cookie
function getCookie(c_name){
    if (document.cookie.length>0){
        c_start=document.cookie.indexOf(c_name + "=");
        if (c_start!=-1){
            c_start=c_start + c_name.length+1;
            c_end=document.cookie.indexOf(";",c_start);
            if (c_end==-1){ 
                c_end=document.cookie.length;
            }
            return unescape(document.cookie.substring(c_start,c_end));
        }
    }
    return "";
}

猜你喜欢

转载自blog.csdn.net/yemuxia_sinian/article/details/80931457