2010-05-07 11 views
0

下面是即時通訊使用的功能:的Javascript的Cookie功能不工作的域

設置cookie的:

function set_cookie (name, value, exp_y, exp_m, exp_d, path, domain, secure) 
{ 
    var cookie_string = name + "=" + escape (value); 

    if (exp_y) 
    { 
    var expires = new Date (exp_y, exp_m, exp_d); 
    cookie_string += "; expires=" + expires.toGMTString(); 
    } 

    if (path) 
     cookie_string += "; path=" + escape (path); 

    if (domain) 
     cookie_string += "; domain=" + escape (domain); 

    if (secure) 
     cookie_string += "; secure"; 

    document.cookie = cookie_string; 
} 

讀取Cookie:

function get_cookie (cookie_name) 
{ 
    var results = document.cookie.match ('(^|;) ?' + cookie_name + '=([^;]*)(;|$)'); 

    if (results) 
    return (unescape (results[2])); 
    else 
    return null; 
} 

刪除Cookie:

function delete_cookie (cookie_name) 
{ 
    var cookie_date = new Date (); // current date & time 
    cookie_date.setTime (cookie_date.getTime() - 1); 
    document.cookie = cookie_name += "=; expires=" + cookie_date.toGMTString(); 
} 

我用Jquery構造th e cookie:

if(get_cookie('visible')== 'no') { 
     $("#wrapper").hide(); 
     $(".help").hide(); 
     $("#slid .show").show(); 
     $("#slid .hide").hide(); 
     } else { 
      $("#slid .show").hide(); 
      $("#slid .hide").show(); 
     } 
    $("#slider").click(function() { 
     if(get_cookie('visible')== null) { 
      set_cookie('visible','no', 2020, 01,01, '/', 'domain.com'); 
     } else { 
      delete_cookie('visible'); 
     } 
      $(".help").slideToggle(); 
       $("#wrapper").animate({ opacity: 1.0 },200).slideToggle(200, function() { 
        $("#slid img").toggle(); 
       }); 
    }); 

我試圖設置所有在domain.com下存在的路徑爲'/'的頁面的cookie。

然而,使用這些函數和jQuery似乎沒有工作,任何人都可以告訴我哪裏出錯了?

回答

0

工作對我來說,只要domain是匹配或省略,並沒有什麼在domainpath是得到由escape()錯位。

(你不應該使用escape()的cookie參數:有對這些沒有標準的逃避方式它通常是一個壞主意,用escape()/unescape()任何;它是一個非標準的編碼方案,是不是。與URL編碼相同,所以如果你嘗試從PHP等其他語言讀取cookie,你將無法使用任何內置函數正確解碼它,如果你想要cookie值本身的真正的URL編碼,請參閱encodeURIComponent/decodeURIComponent,雖然它們仍然不用於cookie參數。)

+0

如何調整以添加路徑和域以確保並錯過轉義問題? – CLiown 2010-05-07 14:54:27

+0

只需將'path'和'domain'值直接添加到字符串中,而不用調用'escape()'(或其他)來對它們進行編碼。 (是的,這意味着不可能有一個帶有分號的「路徑」。) – bobince 2010-05-07 15:56:56