2017-10-29 4 views
-1

私は多言語Webアプリケーションを開発しています。ユーザーが言語を設定すると、Cookieに格納されます。 PHPスクリプトはクッキーを読み込み、適切な言語ファイルを読み込みます。ユーザーが言語を変更すると、Cookieの値が変更され、ページが再読み込みされます。 PHPスクリプトはまだ古い(間違った)クッキー値を読み込みます。私はchromeで "empty cache and reload"オプションを試し、手動でクッキーを削除しようとしましたが、PHPスクリプトは古いクッキー値を読み込みます。コンソールでJavaScriptを使ってCookieを読み込むと、新しい(正しい)値が返されます。ここで

が動作しないPHPのコードスニペットです:

if (isset($_COOKIE['language'])) { 
    $language = $_COOKIE['language']; 
    require_once $_SERVER['DOCUMENT_ROOT'] . "/language/$language.php"; 
    } 
    else { 
    $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); 
    setcookie("language", $lang, time()+31104000); 
    header($_SERVER['DOCUMENT_ROOT']); 
    die(); 
    } 

私は、Webを検索したが、ポイントを溶液に私ですどんな答えか何かを見つけることができませんでした。

PS:同じサーバー上の別のWebアプリケーションで同じコードスニペットを使用していますが、動作します。

EDIT:JavaScriptコードは言語に

function changeLanguage(lang) { 
    var d = new Date(); 
    d.setTime(d.getTime() + (31536000000)); 
    var expires = "expires="+ d.toUTCString(); 
    document.cookie = "language=" + lang + "; " + expires; 
    location.reload(); 
} 

EDIT 2変更するには:問題ではJavaScriptコードによって引き起こされているようですので、HTTPヘッダのでは は2つのクッキーの名前の言語があります。これは、あなたが"Location: "プレフィックスを逃しているリダイレクトするように意図されている場合は

+0

ここで、言語を変更するコードはありますか。 – nogad

+1

'$ _COOKIE'は、クライアントがリクエストで提供したクッキーで満たされています。リクエスト中の 'Cookie'ヘッダの内容は何ですか? – zerkms

+3

これを引き起こすエラーを除けば、あなたが直接ファイルにアクセスして実行するために信頼できない入力を使用しているので、 '' /language/$language.php ''を実行することはお勧めしません。 '..'などを使用して他のファイルにアクセスすると悪用される可能性があります。 – JCOC611

答えて

1
header($_SERVER['DOCUMENT_ROOT']); 

。また、ローカルのファイルシステムのパスではなく、URLが必要なこともあります。

header('Location: ' . $_SERVER['REQUEST_URI']); 
+2

それでも、私は 'Location:/ var/www/html'のようなものは良いリダイレクトになるとは思わない。 – Phil

+0

ありがとう。私はそれを変更しましたが、問題はまだここにあります。 – Agi38

+0

@ Agi38私は、サーバー側のリダイレクトを必要としていると思います。言語クッキーを検出または設定するコードを再構成し、**必要な言語ファイルを読み込みます。リダイレクトは必要ありません – Phil

関連する問題