2011-08-12 1 views
1

私は、言語クッキーを保存するための簡単なスクリプトを書いています。PHPによるクッキーアップデート

ユーザーが言語を選択すると、それに応じてCookieを更新したいと思います。

これは機能しません。クッキーが作成されると、更新されません。

<?php 
if($_REQUEST['language']) { 
$language = $_REQUEST['language']; 
setcookie('language', '', time()-3600); 
setcookie('language', $language, time()+3600); 
} 
?> 
<!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" /> 
<title>Cookie language</title> 
</head> 
<body> 
<?php 
echo $_COOKIE['language']; 
?> 
<ul> 
<li><a href="delete.php?language=en">en</a></li> 
<li><a href="delete.php?language=de">de</a></li> 
<li><a href="delete.php?language=es">es</a></li> 
</ul> 
</body> 
</html> 

すべてのヘルプははるかに高く評価:

は、ここでは、コードです!

ありがとうございます。

答えて

1

私はあなたのコードは正常に動作しますが、$の_COOKIE配列は次のリクエストまで更新されていないと思います:)

if($_REQUEST['language']) { 
$language = $_REQUEST['language']; 
setcookie('language', '', time()-3600); 
setcookie('language', $language, time()+3600); 
$_COOKIE['language'] = $language; 
} 
0

一つのことは間違いなく働くことができないことをそこにあります:あなたは$_COOKIE権利を呼んでいますsetcookie()の後。 php documentationをご覧ください。そこ書かれている:

クッキーが設定されていたら、彼らは次のページにアクセスすることができ 負荷が$ _COOKIE

でだから、あなただけの次の要求にクッキーにアクセスする必要があります。代わりに

echo $language; 

を使用してください。

+0

それは本当ですが、ない場合は:あなたのコード内$_GET$_REQUESTを交換した場合

は、それはあなたが期待するように動作します。実際にコードを実行するのが面倒な場合は、間違っていることがわかります。 – sanmai

2

なぜsetcookie()を2度呼びますか?クッキーを削除して再度設定する必要はありません。

setcookie('language', $language, time()+3600); 

クッキーの値と時間が更新されます。デフォルトで$_GET$_POST$_COOKIEの内容を含む連想配列で

1

As per definition$_REQUEST

つまり、$_GET['language']$_COOKIE['language']で上書きされ、$_REQUEST['language']$_COOKIE['language']になります。

<?php 
if (isset($_GET['language'])) { 
    $language = $_GET['language']; 
    setcookie('language', $language, time()+3600); 
    // setcookie() doesn't update $_COOKIE 
    $_COOKIE['language'] = $language; 
} 
?> 
<title>Cookie language</title> 
<?php echo $_COOKIE['language']; ?> 
<ul> 
<li><a href="delete.php?language=en">en</a></li> 
<li><a href="delete.php?language=de">de</a></li> 
<li><a href="delete.php?language=es">es</a></li> 
</ul>