2013-08-20 44 views
0

首先,請記住,我從來沒有使用過Javascript(我只用了一些腳本,工作在100%)和Objet編程相同(瞭解了Pascal的程序設計,12年前)。使用JavaScript設置cookie(如果尚未設置的話)

現在,我必須在德國和法國創建一個小網上商店。

我提出了設置保持語言選擇的cookie的功能。

但現在,我至少想要一件事:如果沒有任何名爲「語言」的cookie,請創建一個並將其設置爲法語。

我該怎麼做?

我的功能:

function setCookie(sName, sValue) { 
var expDate = new Date(); 
expDate.setTime(expDate.getTime() + (365 * 24 * 3600 * 1000)); // ici 1 an 
document.cookie = sName + "=" + escape(sValue) + ";expires=" + expDate.toGMTString() + ";path=/"; 
} 

和頁面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
     <link href="./css/style.css" rel="stylesheet" media="all" type="text/css" /> 
     <script type="text/Javascript" src="./javascript/cookie.js"></script> 
     <title></title> 
     <?php 
      require_once './includes/google_analytics.php'; 
     ?> 
    </head> 
    <body onload="setCookie('language','fr');"> 
    <p> 
     Language : <a href="<?php echo $_SERVER['PHP_SELF']?>" onclick="setCookie('language','fr')">fr</a>/
     <a href="<?php echo $_SERVER['PHP_SELF']?>" onclick="setCookie('language','de')">de</a> 
    </p> 
    <?php  
     require_once './includes/menu.php'; 
    ?> 

     <div id="contener"> 

     <!-- --------------------------------------------- -->  

    <?php 
     require_once './includes/header.php'; 
    ?> 

     <!-- --------------------------------------------- --> 

     <!-- --------------------------------------------- --> 

    <?php 
     require_once './includes/footer.php'; 
    ?> 

     </div> 
    </body> 
</html> 

,我想用 「的onload」 做了測試。

+0

的可能重複[使用Javascript isset()等效](http://stackoverflow.com/questions/2281633/javascript-isset-equivalent)。閱讀更多關於[**如何提出一個關於Stack Overflow的問題**](http://stackoverflow.com/questions/how-to-ask) –

+0

http://www.quirksmode.org/js/cookies.html – Virus721

+1

你有__avaScript_中的_get_ cookie嗎? –

回答

0

這將是一個方法來檢查如果cookie已經設置:

if (document.cookie.indexOf("language=") < 0) 
    setCookie("language", "fr"); 

注意,這也不會設置Cookie,如果任何餅乾有language結尾的名稱。


編輯:
這裏是一個適當的功能檢查,如果有一定的名字的cookie已經存在。

function cookieIsset(name) 
{ 
    var cookies = document.cookie.split(";"); 
    for (var i in cookies) 
    { 
     if (cookies[i].indexOf(name + "=") == 0) 
      return true; 
    } 
    return false; 
} 

與您可能只是做

if (!cookieIsset("language")) 
    setCookie("language", "fr"); 

如何onload
在你<head>面積增加以下內容:

<script type="text/javascript"> 
document.onload = function() { 
    // code ... 
}; 
</script> 

PHP解決方案:
因爲OP最初有標記。

if (!isset($_COOKIE['language'])) 
    setCookie('language', 'fr'); 
+0

有了這個,如果SetCookie不存在,我應該在哪裏放置SetCookie? – Anaon

+0

這樣的: <體的onload = 「功能(){ \t \t如果(cookieIsset(」! 「(語言 」 「FR」);} 語言 \t \t {setCookie方法))「}」> ? – Anaon

+0

@Anaon我已經更新了我的答案。 –

0

我知道這個答案看起來很長,但它有非常方便的實用方法。 您可以使用這兩種工具的cookies方法 -

// Store the name/value pair as a cookie, encoding the value with 
// encodeURIComponent() in order to escape semicolons, commas, and spaces. 
// If daysToLive is a number, set the max-age attribute so that the cookie 
// expires after the specified number of days. Pass 0 to delete a cookie. 
function setCookie(name, value, daysToLive) { 
    var cookie = name + "=" + encodeURIComponent(value); 
    if (typeof daysToLive === "number") 
    cookie += "; max-age=" + (daysToLive*60*60*24); 
    document.cookie = cookie; 
} 

// Return the document's cookies as an object of name/value pairs. 
// Assume that cookie values are encoded with encodeURIComponent(). 
function getCookies() { 
    var cookies = {}; // The object we will return 
    var all = document.cookie; // Get all cookies in one big string 

    if (all === "") // If the property is the empty string 
     return cookies; // return an empty object 

    var list = all.split("; "); // Split into individual name=value pairs 

    for(var i = 0; i < list.length; i++) { // For each cookie 
     var cookie = list[i]; 
     var p = cookie.indexOf("="); // Find the first = sign 
     var name = cookie.substring(0,p); // Get cookie name 
     var value = cookie.substring(p+1); // Get cookie value 
     value = decodeURIComponent(value); // Decode the value 
     cookies[name] = value; // Store name and value in object 
     } 
return cookies; 
} 

,然後 -

/* a js function to check and set cookie */ 
function checkAndSetCookie(sName, sdefaultValue) { 
    var cookies = getCookies(); 
    if(typeof(cookies[sName])==="undefined"){ 
     setCookie(sName, sdefaultValue, 365 * 24 * 3600 * 1000) 
    } 
} 

變化的html -

<!-your html --> 
<body onload="checkAndSetCookie('language','fr')"> 

<!-- add just before body --> 
<script type="text/javascript"> 
    checkAndSetCookie('language','fr'); 
</script> 
<body> 
+0

對我來說不行:/ – Anaon

+0

你能顯示你正在使用的'cookie.js'文件的內容嗎 –

+0

內容是你在答案上寫的三個函數,什麼都沒有其他 – Anaon