cookie にセットしたはずの値が反映されません。(詳しくは反映されたように見えた後、消える)


index.phpに<from>がありIDとpassをいれ、submitするとlogin.phpに飛び、ID/passが確認されれば、setcookie('id','aaa')が処理され、index.phpに再度移動し、確認されたIDが表示されるものです。
「反映されたように見えた」というのは、ieHTTPHeaders というもので確認すると、login.phpに移動した時には

Set-Cookie: id=aaa; '数字とアルファベット'='&でつながったアルファベット'

とあるのですが、index.phpになるとid=aaa; が消え、

Set-Cookie: '数字とアルファベット'='&でつながったアルファベット'

のみと変わっています。
使用環境はlocalhostでapache2.0.63+php5.2.11+UTF-8+jQuery、です。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/10/07 02:09:25
  • 終了:2009/10/07 23:30:12

ベストアンサー

id:TRTr No.2

TRTr回答回数52ベストアンサー獲得回数132009/10/07 21:45:10

ポイント70pt

簡単なテストをして状況を洗い出してみてはいかがでしょうか。


setcookie.php

<?php

setcookie("aaa","999");

?>


showcookie.php

<?php

print_r($_COOKIE);

?>

(<は全角になってますが半角にしてください)

この二つを同じディレクトリにおいてブラウザで続けてアクセスすると、cookieは表示されるでしょうか。

表示されない場合、ブラウザでクッキーに保存されている値は確認できるでしょうか。

http://sgprmm.seesaa.net/article/123908136.html

双方のファイルのパスで値を取得できるか試してみてください。


これで表示できて質問のような状況だとすると

setcookieのpathがlogin.phpまで含んでいるとか

index.phpとlogin.phpが別のパス/ドメインにあるなど、

ブラウザ側がcookieを送信しない理由があると考えられます。

表示できたら、この二つのファイルをパス的にlogin.phpとindex.phpと同じ配置にして

同じことをしてみてください。

動作するでしょうか。


1 ブラウザはクッキーを記録しているか

2 ブラウザがクッキーをindex.phpとlogin.php両方に送信される状況にしているか

の二点を中心に状況の切り分けをしてみてください。

pathやdomainを設定していない場合、

少なくとも二つのファイルは同一ドメインの同一パスにあることが前提となります。

id:AKI-NAMI

回答を待っている間にindex.php自体にPOSTして表示するように書き換えてみるとちゃんと表示されます。

書き忘れていたのですが、二つのファイルのツリー構造は

main/index.php と main/login/login.php

となっており、setcookieに'main/','./','../'の3種類のpathをsetcookie('aaa','value',0,$path);の形で入れていますがどちらも反映されません。

問題はどうやらこのあたりらしいのですが、まだわかりません。

2009/10/07 22:50:21

その他の回答(1件)

id:TRTr No.1

TRTr回答回数52ベストアンサー獲得回数132009/10/07 08:11:52

クッキーはヘッダの情報の一つですから

login.phpからindex.phpに移動する際に

login.phpでクッキーをセットしたら

index.phpではセットしたクッキーを$_COOKIE[]などで

読み出してあげる必要があると思いますが

そのあたりの処理はどうなっているでしょうか。

http://w1.nirai.ne.jp/freeze/main/file10.html

id:AKI-NAMI

質問の長さを気にして、省略していますが、

login.php ではsetcookie('id','aaa');

index.php ではprint($_COOKIE['id']);

としています。

ですが、質問にあるように、id=aaa の部分が消えているので当然 「aaa」とは表示されません。

2009/10/07 17:12:36
id:TRTr No.2

TRTr回答回数52ベストアンサー獲得回数132009/10/07 21:45:10ここでベストアンサー

ポイント70pt

簡単なテストをして状況を洗い出してみてはいかがでしょうか。


setcookie.php

<?php

setcookie("aaa","999");

?>


showcookie.php

<?php

print_r($_COOKIE);

?>

(<は全角になってますが半角にしてください)

この二つを同じディレクトリにおいてブラウザで続けてアクセスすると、cookieは表示されるでしょうか。

表示されない場合、ブラウザでクッキーに保存されている値は確認できるでしょうか。

http://sgprmm.seesaa.net/article/123908136.html

双方のファイルのパスで値を取得できるか試してみてください。


これで表示できて質問のような状況だとすると

setcookieのpathがlogin.phpまで含んでいるとか

index.phpとlogin.phpが別のパス/ドメインにあるなど、

ブラウザ側がcookieを送信しない理由があると考えられます。

表示できたら、この二つのファイルをパス的にlogin.phpとindex.phpと同じ配置にして

同じことをしてみてください。

動作するでしょうか。


1 ブラウザはクッキーを記録しているか

2 ブラウザがクッキーをindex.phpとlogin.php両方に送信される状況にしているか

の二点を中心に状況の切り分けをしてみてください。

pathやdomainを設定していない場合、

少なくとも二つのファイルは同一ドメインの同一パスにあることが前提となります。

id:AKI-NAMI

回答を待っている間にindex.php自体にPOSTして表示するように書き換えてみるとちゃんと表示されます。

書き忘れていたのですが、二つのファイルのツリー構造は

main/index.php と main/login/login.php

となっており、setcookieに'main/','./','../'の3種類のpathをsetcookie('aaa','value',0,$path);の形で入れていますがどちらも反映されません。

問題はどうやらこのあたりらしいのですが、まだわかりません。

2009/10/07 22:50:21
  • id:AKI-NAMI
    自己解決してしまいました。
    pathや各ファイルのパラメータを見直して、今動いております。
    申し訳ございません。これで終了させていただきます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません