• 締切済み

PHP4 setcookie関数でIE6上でCookieが発行されない

お世話になっております。 件名の通りですが、(クライアント)Netscape7.1やOpera上では正常にCookieが発行されて、Cookieにより条件分岐処理が行えるのですが、IE上ではそれが出来ません。 以下のような設定でCookieを発行しようとしています。 (サーバー) setcookie("user_test_id",$row->user_id,time()+60*60*24*60,"/test_folder/") ; ※$row->user_idとはMysqlに登録されている文字列を取得しています 構築環境は下記の通りです。 (サーバー) WindowsXP上でapache_2.0.55、php-4.4.2 ※PHPは正常に動作中(他のスクリプトは問題ありません) 同じ様にLocalhostにAnhttpd1.4[Webサーバー]とPHP4で上記と同じシステムを構築した場合、IEでも正常にCookieが発行されます。ということは、Apacheの設定に不備があるのでは?っとにらんでいるのですが、具体的にどこをいじれば良いのか分かりません。 原因究明に繋がるヒント(回答)をご存知の方、どうかご教授お願い致します。よろしくお願い致します。

  • PHP
  • 回答数2
  • ありがとう数1

みんなの回答

回答No.2

php.iniの session.cookie_path はどうなっていますか? phpスクリプトが置かれているディレクトリがその対象になっていますでしょうか? 確認なのですが、session_start()関数は実行されていますよね。

参考URL:
http://jp.php.net/manual/ja/ref.session.php
dora2005
質問者

お礼

解決しましたのでお知らせしときます。 Setcookieでパスは指定してましたが、ドメインは指定いませんでした。 ドメインを指定してなくても同一マシン(ローカルサーバ)であればCookieは発行されるみたいですが、セグメントが違う別PCからはCookieは発行されないみたいです。 今回ドメインを指定することで解決しました。

dora2005
質問者

補足

ご回答ありがとうございます。 >session.cookie_path はどうなっていますか? session.cookie_path = / とデフォルトのままにしています。 Cookeiが正常に発行されるテストサーバと設定は同じにしています。テストサーバと本番サーバの違いはWebサーバが前者はanhttpd1.42n、後者はApache2を使っています。 >session_start()関数は実行されていますよね。 session_start()関数は本スクリプトでは利用していません。Cookieしか使っていません。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

IE6の設定を「全てのCookieを受け入れる」にしてもだめでしょうか。

dora2005
質問者

補足

ご回答ありがとうございます。もちろんIEの設定も変えて試しています。(すべてのCokkieを受け入れるに設定)

関連するQ&A

  • setcookie関数について

    お世話になっております。 Setcookie関数で、「有効期限をブラウザを閉じるまで(セッションの最後)」かつ「クッキーを有効としたいパス」かつ「クッキーが有効なドメイン」を設定したいのですが、引数をどう設定すれば良いか分かりません。 現在は下記のように1日だけCokkieを有効にしてます。 setcookie("user_id",$user_id,time()+60*60*24*1,"/","192.168.134.249"); ブラウザが閉じるまでの設定は (例) setcookie ("TestCookie", $value); 上記の通り有効期限を空にすれば良いとオフィシャル情報ではありますが、パスとドメインの設定は必須なのでパスとドメインを入力するとエラーが出ます。 その時のSetcookieの引数は下記の通りです。 setcookie("user_id",$user_id,"/","192.168.134.249"); ↑有効期限を抜いた どうかご教授お願い致します。

    • ベストアンサー
    • PHP
  • phpでのCookieのパスの書かれ方

    phpの初心者なのですが、Cookieでうまく情報の引き渡しができないので、アドバイス頂けないでしょうか? test1でCookieを初期設定した後に、Cookieを使ってtest2を呼び出し、 test2上で設定し直した値でCookieを書き変えてtest2を再呼び出ししています。 再呼び出しした時のCookieが読めないので、ブラウザを調べてみると、yyという名前のクッキーが2つ存在しているためだと判りました。値は確かに置き変わっているのですが、パスが違っているので読み出せないようです。 初期設定した時のパスは /tst/  → test1.phpでsetcookieで設定したもの 再設定した時のパスは /  → test2.phpの中のJavascriptで設定したもの になっていました。 ▽test1.php (/svr1/tst/) setcookie("yy",$yy,0,"./"); (略) header("HTTP/1.1 301 Moved Permanently"); header("Location: test2.php"); ▽test2.php function set_Cookie() { yy = parseInt(document.f1.ck_yy.value); document.cookie = "yy=" + yy + "; path=/"; return true; } <php? $yy = $_COOKIE['yy']; ?> <form name="f1" action="test2.php" method="post"> <input name="yy">  <input type="submit" value="実行" onClick="set_Cookie()">   </form> setcookie の引数であるパス名を最初は省略していたのですが、/tst/というパスが入ってきてしまうため、パス名をあえて ./としてみたのですが結果は同じでした。 ちなみにtest1の呼び出し元は別のサーバーで以下のように呼びだしています。 ▽test0.html (/svr0/wwwroot/) <a href="http://svr1/tst/test1.php">test1</a> パス名はどのように決まるのでしょうか?

    • ベストアンサー
    • PHP
  • phpでcookieのセット

    こんばんは。 php4 apache でプログラミングしています。 cookieをセットしようとして、マニュアル通り setcookie ("TestCookie", "Test Value"); と記述すると、 Warning: Cannot add header information - headers already sent by (output started at /url~ といったエラーが出ます。 原因に心当たりのある方はアドバイス宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHP のsetcookie()関数について

    PHP5を使ったHTML文書で、setcookie()関数を使っていますが、以下のようなメッセージが出てきてクッキーに新しいデータを書き込むことが出来ません。 環境はWindows10, IE11です。 PHP使用方法: $fname="mondai10.txt" setcookie("filename", $fname);  // line 38 setcookie("version",3); // line 39 メッセージ: Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\QAmondaiDisplay.php:3) in C:\xampp\htdocs\QAmondaiDisplay.php on line 38 Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\QAmondaiDisplay.php:3) in C:\xampp\htdocs\QAmondaiDisplay.php on line 39 そしてこのクッキーを次のようにJavaScriptで読み込んでいるのですが、表示させてみると書き込んだものとは全く異なるものが表示されます。 JavaSript 使用法: var cookiedata = window.document.cookie; window.document.getElementById("q1").innerHTML =cookiedata;; 実際に表示されるもの: PHPSESSID=57c35633ffc2fe44622ee27e61bf44eb; filename=yasudaShiroexpires=Mon, 08 Oct 2018 21:44:48 GMT そしてこの表示は、最後の時間以外はいつも同じです。 どこに問題があるのでしょうか? 詳しい方、どうか教えてください。

    • ベストアンサー
    • PHP
  • setcookieが動きません

    $id = $_GET['id']; setcookie('id', $id, time() + 24 * 3600); というスクリプトをphpフォームが付いたindex.htmlの冒頭に書き、 入力内容確認画面のconf.phpに <input type="hidden" name="ap_id" value="<?php echo $_COOKIE['id']; ?>"> と入れています。 一度だけクッキーが取得できたのですが、なぜかそれ以降機能しなくなりました。 PHP初心者なのですが、ぜひ間違いを教えて下さい! 宜しくお願いします。

    • ベストアンサー
    • PHP
  • PHPでのCookie

    PHPでクッキーを使い、下記のような入力フォームを作りました。 form.phpで入力→form2.phpで正常出力出来るのですが、 form2.phpで一度更新しないと、結果が画面に表示されません。 これをform2.phpを開いた時点で表示されるようにするには、どのように書けばいいのでしょう。 後1つあります。form.phpで 「テスト&1」と書くと「テスト」としか表示されなく、&とそれ以降が記憶されません。 これはなぜでしょうか? お願いします。 【form.php】 <?PHP parse_str($_COOKIE["city"]); parse_str($_COOKIE["city_name"]); ?> <html> <form method="post" action="form2.php"> <?PHP echo "名前1<input type=text name=name1 maxlength=16 size=12 value=$set_name1> <BR>ID<input type=text name=p1 maxlength=8 size=6 value=$set1><BR><BR>"; echo "名前2<input type=text name=name2 maxlength=16 size=12 value=$set_name2> <BR>ID<input type=text name=p2 maxlength=8 size=6 value=$set2>"; ?> <input type="submit" value="実行"> </form> </html> 【form2.php】 <?php if ($_POST) { $city1 = $_POST["p1"]; $city2 = $_POST["p2"]; $city_name1 = $_POST["name1"]; $city_name2 = $_POST["name2"]; setcookie ("city", "set1=$city1&set2=$city2",time()+3600*24*90); setcookie ("city_name", "set_name1=$city_name1&set_name2=$city_name2",time()+3600*24*90); } parse_str($_COOKIE["city"]); parse_str($_COOKIE["city_name"]); echo $set_name1; echo $set1; echo $set_name2; echo $set2; ?>

    • ベストアンサー
    • PHP
  • setcookie 関数について

    始めまして。 setcookie("TestCookie", "test", time()+3600); を実行した場合、 クライアント側(WindowsXP)の C:\Documents and Settings\user\Local Settings\Temporary Internet Files にクッキーファイルが生成されます。 しかし、 setcookie("TestCookie", "test", 0); を実行した場合は、クッキーファイルが見付かりませんでした。 【質問1】 この現象は、WindowsXP の仕様でしょうか? それとも、setcookie の仕様でしょうか? (OSに関係なく有効時間を0にしたらファイルは生成されない??) 【質問2】 クッキーファイルはみつからなかったですが、クッキーから値は正常に取得できました。これは、クライアント側のメモリにクッキーがいるということなのでしょうか?それとも、どこかにファイルがあるのでしょうか? 以上です。 よろしくご教授くださいm( __ __ )m

    • ベストアンサー
    • PHP
  • Cookieをリセットしたい

    Cookieをいったんリセットしてゼロの状態からまたはじめたいと思っています。 クライアントが持っているCookieの値を削除したい場合、過去のタイムスタンプを利用すると書かれていましたが、下記のようにサーバー側(phpのプログラム側)でCookie名を変更するだけではダメなのでしょうか? setcookie("TestCookie", $value); ↓ setcookie("TestCookienext", $value); ためしにテストしてみたのですが問題なさそう(?)だったのですが、何か問題あるのでしょうか。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • phpのsetcookie()関数について 初心者なんですがわからない点があるのご返答お願いします。

    yahoo知恵袋で質問して回答も貰ったんですが その後に確認したいことがあったのですがあちらで質問の補足は200文字までという制限があったのでこちらで質問させてもらっています。 あちらでした質問が ////////////////////////////////ここからyahooでした質問///// phpの勉強をしている初心者のものですが、私の参考にしている本のsampleコードで わからない点があります。 phpの勉強をしている初心者のものですが、私の参考にしている本のsampleコードで わからない点があります。 <?php setcookie("count", true); ?> <html> <head> <title>sample<title> <body> <h2>店内のご案内</h2> <hr> <?php if(!isset($_COOKIE["count"])){ print "はじめてのおこしですね。<br />\n"; } else{ print "毎度ありがとうございます。<br />\n"; } ?> </body> </html> というコードなんですが一回目のアクセスの時にはif文のtrueが実行されて「はじめておこしですね」と 表示されて二回目以降は「毎度ありがとうございます」と表示されると本には書いているのですが 私にはsetcookieの部分で$_COOKIE["count"]にはtrueという値が与えられているからif文の条件である $_COOKIE["count"]に値がないというのはfalseでelseの文の処理がされて「毎度ありがとうございます」 と表示されるか $_COOKIE["count"]の値がtureなのでif文条件式全体がtureになり、「はじめてのおこしですね。」が 表示されるが二回目以降もその表示がされていくか のどちらかになると思うのですが、どのように考えればよいのか教えてください。 ///////////////////////ここまでyahooでした質問です。////////// と質問しそれに回答者が //////////////////////回答者が答えてくれた返答//////////////// クッキーは、ブラウザに記録され、ページにアクセスするときに自分のクッキーをサーバに渡します。 SetCookieの段階では、このクッキーはまだ有効ではありません。 SetCookie()関数はSet-Cookie:ではじまるHTTPヘッダを作ってブラウザに渡すべきクッキーを書き出すだけなのです。 順番としては、 ブラウザがページを読み出す→サーバはクッキーを添えて文書をブラウザに渡す→ブラウザはクッキーを受け取って記録する→ ブラウザが先程受け取ったクッキーを添えてページを読み出す→サーバは受け取ったクッキーがあるのでif(!isset($_COOKIE["count"]))がfalseになり「毎度ありがとうございます。」と表示する。 /////////////////////ここまで回答者の返答/////////////// と答えてくださったんですがその後に聞きたいことがあったのですが 上で書いたとおり制限があったので質問できなかったのでその質問を ここから下に書くのでよければご返答お願いします。 /////////////////////ここから答えてもらいたい質問////////// 自分なりに教えてもらったことを解釈してみたんですが、 一度目のアクセスでは、まずブラウザがページをサーバーに要求しそれに対してサーバーがページとクッキーを渡すが、 このときのブラウザに渡すページは、ブラウザからはクッキーをもらっていないのでクッキーの処理がしていないページになる。 なので一回目のif(!isse($_COOKIE["count"]))は$_COOKIEの値を定義されたページは貰っておらず値がないのでtrueとなり 一回目はサーバーからクッキー受け取ったクッキーを記録するだけにとどまる。 そして二度目のアクセスでは、ページの要求と一度目のアクセスで受け取ったクッキーをサーバーに渡すので、 サーバーは今回はクッキーの処理をしたページをブラウザに渡すのでif(!isset($_COOKIE["count"]))は$_COOKIEの値を定義されたページを貰っているのでflaseとなり 「毎度ありがとうございます」と表示される。 このようにわたしなりに解釈したんですがこのように考えてもよいでしょうか? もしよろしければ見づらい文なんですがお返事お願いします。

    • ベストアンサー
    • PHP
  • phpのsessionとcookieについて

    質問は以下に2つです。 プログラムの説明は、pass,idから認証を行い、sessionidを発行します。二度目の以降はsessioidから認証します。 sidpost.phpからpostでIDとパスワードを入力させます。 データベースはid, pass, sidの3つのカラムがあります。 <?PHP require_once'DB.php'; session_name("sid"); session_start(); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <?php $id = $_POST['id']; $pass =$_POST['pass']; $cookie = $_COOKIE['sid']; $sid = session_id(); //データベース参照 //プレースホルダーを使用 //id からpassを参照する //cookie から sidを参照する $data=$sth->fetchRow(DB_FETCHMODE_ASSOC);//参照したデータを$dataの連想配列に格納 //sid保存のプレースホルダー $sth2 = $dbh->prepare('UPDATE accountid SET sid=? WHERE id=? AND pass=?'); //cookieが保存されていない場合 if(!isset($cookie) && isset($pass) && isset($id)){ //idとpassから認証 if($pass === $data['pass']){ $sth2 = $dbh->execute($sth2, array($sid, $id, $pass)); echo "初めてのログインsid登録"; } //sidがある場合cookieとデータベースのsidを比較 }else if(isset($cookie)){ if($cookie == $data['sid']) echo "sidあり成功"; //クッキーがあり、データベースと一致しない場合,sidを破棄する }else{ echo"あるはずのクッキー" .$COOKIE['sid']."<br>"; $_SESSION=array(); setcookie('sid', '', time()-3600); session_destroy(); echo "ないはずのクックキー".$_COOKIE['sid']; } //それ以外は入力フォームにリダイレクト }else{ header("location: ./sidpost.php?error=error"); } $dbh->disconnect(); ?> </body> </html> 上のようなセッション管理のプログラムを書きました。 質問は2つありまして、 ・1つめは、通常セッション管理を行う際の、条件はどのようにするのが一般的ですか? IDとパスワードがデータベースと一致する場合としない場合の2通り、cookieがある場合、ない場合の2通り、もしcookieがある場合は、データベースの値と一致する場合としない場合の2通りが考えられます。一番最適な条件文はどのようにすればよいでしょうか? またその処理はどのようにすればよいのでしょうか。 例えばcookieがあり、データベースと一致しない場合、$_SESSIONの初期化、setcookieでクッキーの削除、session_destroy()するなど。。。なにかよくわからなくなってしまいました。 ・二つ目は、 上のプログラムではじめsession_name('sid')およびsession_start()を宣言し、クライアントとサーバに$sid=session_idを発行しています。なので、$_COOKIE['sid'];の値には session_id()($sid)になっているはずです。 下のほうで、セッションの管理を行う際、 //クッキーがある場合 else if(isset($cookie)){ if($cookie == $data['sid']) echo "sidあり成功"; //クッキーがあり、データベースと一致しない場合,sidを破棄する }else{ echo"あるはずのクッキー" .$COOKIE['sid']."<br>"; $_SESSION=array(); setcookie('sid', '', time()-3600); session_destroy(); echo "ないはずのクックキー".$_COOKIE['sid']; } クッキーがあり、データベースと一致しない場合に、sessionおよび、cookieの破棄をしています。この前後でechoをもちいて$_COOKIE['sid']の値を出力すると、 破棄するの前のechoでクッキーが表示されず、 破棄したあとのechoでクッキーが表示されました。 なぜこのような結果になるのですか、逆では?と思いました。

    • 締切済み
    • PHP

専門家に質問してみよう