質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

4193閲覧

Cookieごとに条件分岐をさせたい

sleeeep12

総合スコア36

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2018/02/02 06:55

編集2018/02/02 08:56

jQueryでcookie生成をして、渡したクッキーに応じてページ切り替えをさせたいです。

多言語サイト(wordpress)なんですが言語ごとのクッキーを用意して、
そのページにいてもサイトの読み込み時に、もしクッキーを持っていなかったら言語スイッチを出し、一度でもスイッチを選んだらそのクッキーを渡します。
現状このようなコードです。ローカルで作業しています。

header.php↓

//言語スイッチ。display:noneで隠しておく <div class="Lang_cookie"> <ul class="Lang_cookie_switch"> <li class="Lang_cookie_switch_item" id="EN">English</li> <li class="Lang_cookie_switch_item" id="JP">Japanese</li> </ul> </div> //クッキーが取得されてるかどうかを確かめる <?php echo $_COOKIE["AAA"]; ?>

jquery↓

$(function(){ var cookie_save = $.cookie('AAA');    //クッキーごとに言語別に用意したサイトに移動させる if (cookie_save === 'EN') { window.location.href = "http://localhost/wp/en"; } else if(cookie_save === 'JP'){ window.location.href = "http://localhost/wp/"; }else { $('.Lang_cookie').show(); }    //言語スイッチを押すとクッキーを保存。リロードさせる。 $('#EN').click(function(){ $.cookie('AAA', 'EN', { expires: 200 , path: '/' }); location.reload(); });  $('#JP').click(function(){ $.cookie('AAA', 'JP', { expires: 200 , path: '/' }); location.reload(); }); });

こんな具合なのですが、試しにENスイッチを押してみると、クッキーがENの値を受け取ってhttp://localhost/wp/enのURLに飛ぶまではいいんですが、そこでまた延々とリロードを連続で繰り替えしています。
cookieは取得されているので、if文が問題だと思いますが、いかんせん素人なもので原因がわかりません;;;

どこが間違っているのか、ご教授よろしくお願いいたします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sleeeep12

2018/02/02 07:51

例えとしてのURLです。すみませんでした; 現在ローカルで作業中です
sleeeep12

2018/02/02 08:31

分かりました。質問編集します。
defghi1977

2018/02/02 08:41

これって, header.phpの内容を全てのページに仕込んでいる・・・?
sleeeep12

2018/02/02 08:44

はいそうしています。どのページから入っても言語スイッチを表示させたいんですが、これが問題ですか・・;
退会済みユーザー

退会済みユーザー

2018/02/02 08:58

それが問題ですね。
sleeeep12

2018/02/02 09:10

皆様ありがとうございました。解決することができました!
guest

回答2

0

既に/wp/enに遷移した場合でも、必ず以下により /wp/en にリダイレクトするように見えます。

JavaScript

1 if (cookie_save === 'EN') { 2 window.location.href = "http://localhost/wp/en";

したがって、「リダイレクトしなくてもよい条件」を書く必要がありそうですね。あるいは、リダイレクト先では上記判定をしないようにするか。

投稿2018/02/02 09:34

ockeghem

総合スコア11701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sleeeep12

2018/02/02 13:54

ご回答ありがとうございます。 うまく動作させることができました!
guest

0

ベストアンサー

PHPで共通ヘッダーを設定しているのと, 共通のスクリプトを読み込ませていることを踏まえると, おそらくwindow.location.hrefを書き換える条件を,

「cookieのロケールが設定済みで, その値と現在表示しているページのロケールが一致していない場合

とすれば解決するかと.

JavaScript

1$(function(){ 2 var cookie_save = $.cookie('AAA'); 3 4   //クッキーごとに言語別に用意したサイトに移動させる 5 //移動するのはロケール設定がズレている場合に限る 6 if (cookie_save === 'EN' && window.location.href != "http://localhost/wp/en") { 7 window.location.href = "http://localhost/wp/en"; 8 } else if(cookie_save === 'JP' && window.location.href != "http://localhost/wp/"){ 9 window.location.href = "http://localhost/wp/"; 10 }else { 11 $('.Lang_cookie').show(); 12 } 13 14   //言語スイッチを押すとクッキーを保存。リロードさせる。 15 $('#EN').click(function(){ 16 $.cookie('AAA', 'EN', { expires: 200 , path: '/' }); 17 location.reload(); 18 }); 19 $('#JP').click(function(){ 20 $.cookie('AAA', 'JP', { expires: 200 , path: '/' }); 21 location.reload(); 22 }); 23});

なぜ無限ループとなるのか?

  1. cookie未設定→ロケール選択→リロード
  2. cookie設定済み→ロケール判定→指定のURLに移動
  3. 上の処理がページのリロードの都度発生するので無限ループとなる.

NOTE:
もちろんこのままではスクリプトの管理が煩雑なため, ロケール-URLの対応をオブジェクトとして一箇所にまとめる等の工夫は必要でしょう.
NOTE:
URLの判定は!=等で行うのではなく, もう少し確定的にロケールを抽出できるような仕組みとしたほうが良いかも…

JavaScript

1window.location.href.match(//en/)

とか.

投稿2018/02/02 08:56

defghi1977

総合スコア4756

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sleeeep12

2018/02/02 09:09

うまく動きました。的確で分かりやすいご指示大変助かりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問