• 締切済み

PHPのクッキーによるリダイレクト

あるホームページを開いて、リンクをクリックした際に、そのリンク先をクッキーに保存して次にそのページを訪れた場合は、そのページを表示しないでそのリンク先へリダイレクトにはどうしたらいいでしょうか?

みんなの回答

  • level2012
  • ベストアンサー率63% (12/19)
回答No.7

クッキーは焼けそうですね。 そういう場合は、ちょっとした事が原因なんですよ。 その3つのファイルを見れば、簡単に分かるのですが、 そうも行かないですし・・・ 拡張子はすべてphpですよね? hrefの指定もphpファイルにアクセスしていますか? 有効期限は付いていますか? そういえば、phpのエラー表示されるようになっていますか? すべてのファイルを検証しているわけではないので、 内部でエラーしてる可能性があります。

masaki85
質問者

お礼

昨日はいろいろとアドバイスありがとうございました。もう一度ソースを読み直してみたら、elseifと書くべきところをif elseと書いてました。直したらちゃんとリダイレクトされました。ありがとうございます。

  • level2012
  • ベストアンサー率63% (12/19)
回答No.6

クッキーを焼けないようですね。 ブラウザの設定でしょうか?何を使っていますか? 原因を明確にする為に最小構成のPHPファイルを試してください。 cookie.php <?php $value = 'クッキー'; setcookie("TestCookie", $value, time()+3600); if (isset($_COOKIE['TestCookie'])) { echo $_COOKIE['TestCookie']; } else { echo 'クッキーまだ?'; } ?> 上記ファイルは、一度目はクッキーがセットされていないので、 "クッキーまだ?" 二回目以降は、セットされているので、 "クッキー" になります。 ブラウザのクッキーの削除の仕方は分かりますよね?

masaki85
質問者

補足

ありがとうございます。上記の方法を試してみたところ、一度目は"クッキーまだ?"と表示され、二回目以降はちゃんと"クッキー"が表示されました。

  • level2012
  • ベストアンサー率63% (12/19)
回答No.5

先程のtop.phpを改変します。 <?php //クッキーが書き込まれている場合はheaderで各々ページへ。 if (isset($_COOKIE['LangCookie'])) { $LangCookie = $_COOKIE['LangCookie']; if($LangCookie == "ja") { echo "jaが入っている"; //header("Location: ​http://www.***.**/ja.php");//​クッキーにja } elseif("en") { echo "enが入っている"; //header("Location: ​http://www.***.**/en.php");//​クッキーにen } else { echo "何かが入っている"; } }else{ echo "何も入っていない"; } ?> <html> <body> <ul> <li><a href="​http://www.***.**/ja.php">​日本語ページ</a></li> <li><a href="​http://www.***.**/en.php">​英語ページ</a></li> </ul> <body> </html> このままコピーして何が出力されるか確認してください。

masaki85
質問者

補足

何回もありがとうございます。出力の結果ですが、どこにアクセスしても「何も入っていない」と出るだけです。

  • level2012
  • ベストアンサー率63% (12/19)
回答No.4

PHPでも書き込むことが可能です。 下記の通りに試してください。 3つPHPファイルを作成してください。 top.php <?php //クッキーが書き込まれている場合はheaderで各々ページへ。 if (isset($_COOKIE['LangCookie'])) { $LangCookie = $_COOKIE['LangCookie']; if($LangCookie == "ja") { header("Location: http://www.***.**/ja.php");//クッキーにja } else { header("Location: http://www.***.**/en.php");//クッキーにen } } ?> <html> <body> <ul> <li><a href="http://www.***.**/ja.php">日本語ページ</a></li> <li><a href="http://www.***.**/en.php">英語ページ</a></li> </ul> <body> </html> ja.php <?php setcookie("LangCookie", "ja", time()+3600);//有効期限3600秒←追加しました。 echo "jaページ"; ?> en.php <?php setcookie("LangCookie", "en", time()+3600);//有効期限3600秒 echo "enページ"; ?>

masaki85
質問者

補足

たびたび済みません。上記の方法を試してみましたが、各ページに飛んだ後、トップページにアクセスしても各ページにリダイレクトされませんでした。どこがいけないのでしょうか?

  • level2012
  • ベストアンサー率63% (12/19)
回答No.3

大事なのはPHPコードです。 クッキーをセットする事はできましたか? //jaページに setcookie("LangCookie", "ja"); //enページに setcookie("LangCookie", "en"); <PHP? //二度目以降の訪問 if (isset($_COOKIE['LangCookie'])) { $LangCookie = $_COOKIE['LangCookie']; header("Location: http://***で$LangCookieを結合 exit; } ?> <html> : :

masaki85
質問者

補足

たびたびすみません。どうやらJavaScriptのonclickでクッキーに書き込むことが必要みたいです。どういうコーディングをすればよいでしょうか?

  • level2012
  • ベストアンサー率63% (12/19)
回答No.2

htmlを読み込む前ですから、一番上でいいのではないですか? ソースがないので、いまいち問題を把握できませんが if (isset($_COOKIE['TestCookie'])) { header("Location: http://***"); exit; }

masaki85
質問者

補足

これがソースです。 <html> <body> <ul> <li><a href="http://www.***.**/ja.html">日本語ページ</a></li> <li><a href="http://www.***.**/en.html">英語ページ</a></li> </ul> <body> </html> リダイレクト先が1つならいいのですが、2回目以降に2つのサイトのどちらかにリダイレクトさせる方法がよくわかりません。何かいい方法はないですか?

  • level2012
  • ベストアンサー率63% (12/19)
回答No.1

クッキーセット $value = 'something from somewhere'; setcookie("TestCookie", $value); if (isset($_COOKIE['TestCookie'])) { クッキーがセットされている場合の記述 }

参考URL:
http://www.php.net/manual/ja/function.setcookie.php
masaki85
質問者

お礼

ありがとうございます。それでは早速試してみます。

masaki85
質問者

補足

試してみましたがなかなか上手くいきません。 例としてトップページから日本語ページか英語ページにアクセスするんですけど、2回目以降はトップページを表示しないで、前回クリックしたページにリダイレクトしたいんですけど、 そのソースコードと、htmlのどこら辺に埋め込めばいいのか教えてもらえますでしょうか?

関連するQ&A