2015-12-28 93 views
1

爲什麼$ _COOKIE ['lang']在我用javascript編輯cookie並重新加載頁面時不會改變?

我有一個網站,您可以選擇您的語言。如果您第一次進入該網站,$ _COOKIE ['lang']將被設置爲'DE'。否則它將被延長。

function setLangCookie() 
{ 
    if(!isset($_COOKIE["lang"])) 
    { 
     setcookie("lang","DE",time() + (86400 * 30), "/"); 
    } 
    else 
    { 
     setcookie("lang",$_COOKIE["lang"],time() + (86400 * 30), "/"); 
    } 
} 

Cookie on entering the first time

更改後德語言 'EN',cookie將用JavaScript來改變。

function changeLang(lang) 
{ 
    var date = new Date(); 
    date.setTime(date.getTime()+(30*24*60*60*1000)); 
    var expires = "; expires="+date.toGMTString(); 
    document.cookie = "lang="+lang+expires+"; path=/"; 
    location.reload(); 
} 

After editing with JS
這個工作,但是當我看到$ _COOKIE [ '郎'],它有 'DE' 的內容。 Document.cookie代替lang ='EN'。
我也在其他瀏覽器上測試過,結果相同。
我使用Chrome 47.0.2526.106。

編輯: 實施

<?php 
error_reporting(-1); 
session_start(); 
include('PHP_inc/functions.php'); 
setLangCookie(); 
?> 

<select class="LangSelector" onchange="changeLang(value)"> 
<option selected disabled>Language</option> 
<option value="DE">DE</option> 
<option value="EN">EN</option> 
</select> 

而現在由於$ _COOKIE [ '郎']總是 'DE',將它在setLangCookie改變從 'EN' 到 'DE'(),並擴大了時間。

+0

這對我的作品。實施細節一定有問題。你能否編輯這個問題並提供一個完整的自包含例子來重現問題? –

+0

你確定cookie沒有設置http only標誌嗎? – PeeHaa

+1

我會爲你提供一個例子。 –

回答

-3

可能是由於JavaScript中的變量命名'日期'?

試試這個

  function changeLang(lang) 
      { 
       var d = new Date(); 
       d.setTime(d.getTime()+(30*24*60*60*1000)); 
       var expires = "; expires="+d.toGMTString(); 
       document.cookie = "lang="+lang+expires+"; path=/"; 
       location.reload(); 
      } 
+1

不會改變任何東西。 JS部分工作並將cookie設置爲'EN',但是當我重新加載頁面$ _COOKIE ['lang']保留'DE'時。 –

+0

爲什麼命名變量'date'是一個問題?據我所知,它不是[保留關鍵字](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Keywords)或內置對象或流行框架或其他任何東西。 –