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

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

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

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

PHP

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

Q&A

解決済

3回答

5407閲覧

PHPでURLにパラメーターを付けずにcookieが有効かどうかを調べる方法

p-craft

総合スコア205

Cookie

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

PHP

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

1グッド

1クリップ

投稿2016/03/09 04:06

PHPでcookieが使えるかどうかを調べる方法を探しています。

一般的には、まずcookieを発行し、同一画面にリダイレクトさせ、cookieが残っていれば使えるし、残っていなければ使えないという判定だと思いますが、その場合、そのサイトへの初めての訪問なのか、それとも、リダイレクト後なのかの判定の為に、URLにパラメーターが必要です。

ただ、そうすると、表示URLにパラメーターが付くので、動的URLのようになってしまいますが、なんとかcookie判定後にこのパラメーターを消す方法がないかを探しています。

.htsccessの設定か何かで、パラメータ取得後に、パラメーターを消す方法はないものでしょうか?

または、同一サイトへのリダイレクトではなく、他ページにリダイレクトさせ戻ってくるような方法でもいいのですが、$_SESSIONや$_POSTを使って、なんとかURLにパラメーターを含めずに、cookieを判定する方法は無いものでしょうか?

luma👍を押しています

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

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

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

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

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

guest

回答3

0

ベストアンサー

チェック前とチェック後のページが「GETパラメータを含み全く同じURL」というのは,PHP側だけでシンプルに済ませたいのであれば不可能です.

  • 判定用のGETパラメータを付加する (p-craftさんがご存知の方法)
  • 別のページを用意する (shi_ueさんの提案)

基本的にはこのどちらかを選択することになります.どちらを選ぶかは好みですね.ただ,私としてはJavaScript側でやっておくので十分だと思います.

  • nagivator.cookieEnabledをJavaScript側でチェックし,falseであればその旨を表示する (terionさんの提案)

**「いやいやそれじゃJavaScript使えないとき困るでしょ」**って?ご心配なく.<noscript></noscript> を使いましょう.そのメッセージで

「当サイトのご利用にはJavaScriptとCookieを有効にしていただく必要があります」

と出せばいいだけです.

html

1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 2<html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> 5 <title>Example</title> 6 </head> 7 <body> 8 <noscript> 9 <p>当サイトのご利用にはJavaScriptとCookieを有効にしていただく必要があります</p> 10 </noscript> 11 <p id="msg"></p> 12 <script type="text/javascirpt" src="https://code.jquery.com/jquery-1.12.1.min.js"></script> 13 <script type="text/javascript"> 14 <!-- 15 $(function () { 16 $('#msg').text( 17 navigator.cookieEnabled 18 ? 'ようこそ!' 19 : '当サイトのご利用にはCookieを有効にしていただく必要があります' 20 ); 21 }); 22 //--> 23 </script> 24 </body> 25</html>

(IE8以下もサポートしろとか言われそうな気がしたので古い書き方にしました)

投稿2016/03/09 06:28

編集2016/03/09 06:49
mpyw

総合スコア5223

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

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

p-craft

2016/03/09 06:39

CertaiN様 なるほど。。。>< ただ、ちょっとシビアなサイトでして、javaScriptではちょっとという感じでして。。。 例えばなんですが、別URLでのPHPでのcookieの判定結果を、frameの枠で表示させるとかでは出来ないものなのでしょうか。。。
p-craft

2016/03/09 06:41

あと、shi_ue様にも質問したのですが、同一サイト内で2回リダイレクトさせて、2回目のリダイレクトでは、.htaccessでパラメーターを消すという方法では、どうしてうまくいかないのでしょう?というか、同一サイト内で2回リダイレクトさせる事は出来ないものなのでしょうか?
mpyw

2016/03/09 07:16 編集

> 例えばなんですが、別URLでのPHPでのcookieの判定結果を、frameの枠で表示させるとかでは出来ないものなのでしょうか。。。 iframeですよね?普通に出来ますよ.shi_ueさんの方法と組み合わせてください.使える場合は真っ白なページを出しておき,使えない場合は何かしらメッセージを出せばいいと思います.但し「使える場合」でも「使えない場合」に使う分の白い空間は空いてしまいます.個人的にはあまり使いたくないかなー,という感じです,シビアなサイトなら尚更.どういう意味で「シビア」なのかは知りませんが.
mpyw

2016/03/09 07:18

> 同一サイト内で2回リダイレクトさせる事は出来ないものなのでしょうか? 無限ループするのは自明です.「まだリダイレクトしていない状態」と「2回リダイレクトした後の状態」が完全に一致するからです.
p-craft

2016/03/09 19:16

CertaiN様 >iframeですよね?普通に出来ますよ. やってみました! うまくいきました。 ありがとうございました!
p-craft

2016/03/09 19:16

>無限ループするのは自明です.「まだリダイレクトしていない状態」と「2回リダイレクトした後の状態」が完全に一致するからです. すいません。 よくわかっていないもので。。。>_<
guest

0

$_SESSIONはcookieを使えないと、パラメータとして渡してやるか、使えないかのどちらかになってしまいますので、不可でしょう。

cookieが使えないときの着地ページを別に作るなら、可能です。

  1. index.phpで$_COOKIEをセットして、k=1を付けてリダイレクト
  2. $_GETにkがセットされているなら、$_COOKIEを調べてセットされていないなら、着地ページに。

というかたちにすれば、パラメータは見せなくて済みそうです。

投稿2016/03/09 05:10

shi_ue

総合スコア4437

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

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

p-craft

2016/03/09 05:16

shi_ue様 つまり、index.phpはあくまでcookie判定に使って、その後着地ページに飛ばすということですよね? ただそうすると、訪問者にとっては、表示URLが自分がアクセスしたサイトでないように感じられてしまうという事ですよね?
p-craft

2016/03/09 05:20

ちなみになんですが、k=1を付けてリダイレクトさせた後、クッキーを調べて、今度はk=2を付けてもう一度リダイレクトさせ、k=2の場合は、.htsccessでパラメーターを消すというやり方ではまずいのでしょうか?といいますか自分でやってみると何故かリダイレクトの無限ループのようになってしまうのですが、2回同じページにリダイレクトというのはダメなのでしょうか?
shi_ue

2016/03/09 08:01

そりゃそうでしょ。 k=? というのを消す=そのアドレスにアクセスする、ってことですから。 ただ、ユーザーにそのアドレスを返すわけではありません。
shi_ue

2016/03/09 08:05

iframeを使えるなら、その中で展開すればいいですね。 それにしても、iframeは使えるのに、Javascriptはダメって変な要件ですね。 iframeの方がよっぽど嫌だけどな・・・ って、それは人それぞれですね。失礼しました。
shi_ue

2016/03/09 08:54

そういえば、cookieを使えるかどうか判定後、どうするんでしょう? ユーザーに使えないことを注意喚起するんですか?
p-craft

2016/03/09 19:18

shi_ue様 >そりゃそうでしょ。 >k=? というのを消す=そのアドレスにアクセスする、ってことですから。 >ただ、ユーザーにそのアドレスを返すわけではありません リダイレクトとはそういうことのようですね。。。 なるほど。
p-craft

2016/03/09 19:18

>iframeを使えるなら、その中で展開すればいいですね。 >それにしても、iframeは使えるのに、Javascriptはダメって変な要件ですね。 これでうまくいきました! ありがとうございました!
p-craft

2016/03/09 19:20

>そういえば、cookieを使えるかどうか判定後、どうするんでしょう? >ユーザーに使えないことを注意喚起するんですか? えーっと、そういう事です! 設定をONにしてくださいという為です!
guest

0

cookies が使用可能か 判定する方法です。
http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_nav_cookieenabled

cookies の設定方法は、下記サイト。
https://www.whatismybrowser.com/guides/how-to-enable-cookies/

投稿2016/03/09 04:24

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2016/03/09 04:26

PHPじゃなくて、JavaScriptだw たぶん、だれかPHPの方法 教えてくれるでしょ。
p-craft

2016/03/09 04:40

terion様 ご回答ありがとうございました。 そうですね。PHPが知りたいです。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問