• ベストアンサー

phpでcookieをセットする方法

こんにちは。php4 apacheです。 簡単なログインのシステムを作りたいのですが、cookieのセットでつまづいてしまいました。 ちなみに前の質問は http://oshiete1.goo.ne.jp/kotaeru.php3?q=374947 です。 http headerは本文の前に送信しなければいけない事は教えていただいてわかったのですが、では具体的にどう記述したらいいのかまだわかりませんのでお力をいただければと思います。 やりたい事は、ページ1のテキストボックスに入力した値をページ1をサブミットさせてページ2にとばし、ページ2で、フォーム値があればその値をcookieにセット、なければそのままロード、ということをしたいのですが・・・。 ページ2の一番最初に、「もしフォーム値があればcookieをセット、 なければ(すでにcookieが存在するはずなので)そのままロード」 という処理を記述しているのですが、やはり前質問と同じエラーが出てしまいます。 cookieをセットする場合、if文すらその前に記述してはいけないのでしょうか・・・? とすると、こういう場合はどう記述してやるのが通常なのでしょうか? 何分仕事中なもので、返事が遅れることがあると思いますがアドバイスのほど宜しくお願い致します。

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

質問者が選んだベストアンサー

  • ベストアンサー
  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.2

ども、前回も答えたkusukusuです(^^; > やりたい事は、ページ1のテキストボックスに入力した値 > をページ1をサブミットさせてページ2にとばし、ページ2 > で、フォーム値があればその値をcookieにセット、なけ > ればそのままロード、ということをしたいのです > が・・・。 根本から変わって申し訳ないのですが、上記のようなことをしたいとき、なぜsession管理で処理しないのでしょう? php4はsessionがサポートされており、上記のようなことは簡単にできますよ。 まずphp4のバージョンは何でしょう? php4でも、php4.0.6とphp4.2.3では全然別物です。もっと詳しくバージョンを書いてください。 ここからはphp4.2.Xとして話します。 --- page1 --- print<<<EOF <form action="page2.php" method="post">  <input type=text name=str>  <input type=submit value="send"> </form> EOF; ---以上--- --- page2 --- session_start(); $str=$_POST["str"]; //ここでsessionにstrがセットされます。 if($str!="") {  session_regsiter("str"); }else {  処理 } とこんな感じになります。 > cookieをセットする場合、if文すらその前に記述してはいけないのでしょうか・・・? これは大間違いです(^^; もうちょっと詳しくhttpヘッダーについて勉強してください。 セットは【出力の以前】にしなくてはならない、と書かれていませんでしたか? 今回の場合はif分の内容は出力しませんよね? ですから、問題ありません。 もし仮に以下のように、if分の内容を表示するのであれば、問題です。 if($str!="") { //ここで表示を行う  print "hoge";  setcookie(); } 以上参考になったでしょうか?

chachako
質問者

お礼

こんにちは。 再度回答していただいたのにお礼がすごく遅くなってしまって申し訳ありません。 実は私、phpでセッション管理が出来るのを知らなかったのです。 kusukusuさんの回答を見て、調べてみました。 セッション管理をする事にしました。 クッキーのほうも、kusukusuさんに教えていただいたことをふまえて 色々調べて、なんとか扱えるようになりました。 感謝です。 また何かあった時にはよろしくお願い致します。 本当にどうもありがとうございました。

その他の回答 (1)

回答No.1

setcookie(を含む<?php ~ ?>)は"<html>"より前に記述して下さい。 ちなみに http://www.php.net/manual/ja/function.setcookie.php の英文コメントの中にサンプルになりそうなコードが示されています。

chachako
質問者

お礼

こんにちは。お礼が遅くなってしまって申し訳ありません。 なんとか先に進むことができました。 ありがとうございました。

関連するQ&A

  • phpでcookieのセット

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

    • ベストアンサー
    • PHP
  • PHP cookie受け渡しについて

    php 5.16 apache 2.0 フォーム -------------------------------------------------------------- <form method="POST" action="./php_cookie_tm.php"> E-Mail<br> <input type="text" name="mail" value="<?php print($_COOKIE['form_email']); ?>"><br> <input type="submit" value=" 保存 "> </form> -------------------------------------------------------------- 出力 -------------------------------------------------------------- <?php setcookie("form_email",$_POST['form_email'],time()+(60*60*24*90)); ?> クッキー保存 -------------------------------------------------------------- とすると Warning: Cannot modify header information - headers already sent by (output started at C:\Program Files\○○.php:4) in ・・・・・・・ というエラーがでます。 既に発信している?みたいなエラーなのですが・・・・ なぜでるのでしょうか? php.iniの設定?等いろいろみてはいるのですが、原因不明にて すごい困っております。 初心者質問ですいません。

    • ベストアンサー
    • 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
  • cookieの最大数

    入力項目が50個程度のフォームページを作成しています。 データが送信された際に送信データのチェックを行っていて、問題がある場合はエラーページを出力して入力ページに戻るようにしています。 通常は「戻る」ボタンを押すなどして前のページに戻った場合には、フォームに入力された値は保持されているはずなのですが、フレームを利用しているためか、入力ページに戻るとフォームに記入されていた値が全て消えてしまいます。 この状態を回避するために、入力された値を全てcookieに格納し、入力フォームのページで読み込んで表示するようにしました。が、数が多いためか、cookieに格納される値と格納されない値ができてしまいました。 ここで質問なのですが ・cookieに格納する値には数的制限があるのか ・制限があるとすれば、最大数を増やすことは可能か ・cookie以外にフォームの値を保持する方法はあるか 解りづらい点があるかと思いますが、ご回答の程よろしくお願いします。

    • ベストアンサー
    • PHP
  • COOKIEの扱いについて

    いつもお世話になっています。 現在のプロジェクトでCOOKIEの値を利用する機能があって つまずいてます(ToT) やりたい事は 1:特定ページアクセスにアクセスされたらCookieをセット 2:別のページ内に<script src="Cookieセットしたサーバー"></script> を埋め込んでCookieをセットしたサーバーでCookieの値を取得. FIREFOXですと2の段階でもCookieの値を取得できるのですが IEですとCookieが取得できません。 ブラウザの仕様or設定の問題かとおもいますが困っているので よろしくお願いしますm(__)m

  • PHPでフォームに読み込んだ値をセットするにはどう

    PHPでフォームに読み込んだ値をセットするにはどうしたらいいですか?

    • ベストアンサー
    • 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
  • $_COOKIEについて

    はじめまして。 PHPを勉強中なのですが$_COOKIEを使った際にエラーになってしまいます。 それが何故なのか分からないのですが、この辺に詳しい方助けて下さい。 ↓↓状況は以下のとおりです。↓↓ ・開発環境:xampp、php、vista ・下記のスクリプトを記述してブラウザで表示すると、「1回目のアクセスです。」とともにエラー表示も出てきてしまう。 <?php if (isset($_COOKIE["count"])) { $count = $_COOKIE["count"] + 1; } else { $count = 1; } setcookie("count", $count); echo "${count}回目のアクセスです。"; ?> ・上記のスクリプトを実行した際のエラー表示は「 Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs(ディレクトリ)php:182) in (エラーの行数) ・ちなみに、練習で作ってるだけなので同じページに、「setcookie」と「$_COOKIE」を使っている。(ただし、クッキー名などは、前に使っているのとは被らないようにしている) 以上です。 やりたい事は、ブラウザにCookieを送り、読み込むたびに「?回目のアクセスです。」の回数を増やしていきたいです。 しかし、これも出来ずに何度読み込みしても「1回目のアクセスです。」とエラー表示しかでません。 この質問で上手く伝わったかわかりませんが、ご見識ある方お力添え下さいませ。

    • ベストアンサー
    • PHP
  • PHPにおけるCookieの挙動について。

    PHPにおけるCookieの挙動について。 PHPには今回初めて触れるのですが…。 PHPでCookieを使ったプログラムを作っていたところ、「Cookieに値を保存することはできている(ブラウザの機能でCookieの一覧を確認したところ、意図した通りの名前で意図した値が保存されていました)のに取り出すことができない」という事態にはまってしまいました。 プログラムは以下の通りです。 -------------------------------- ・TestCookieIn.php <?php require_once "./TestCookieVariable.class.php"; ?> <html> <head> <title></title> </head> <body> <form action="./TestCookieOut.php" method="POST"> <input type="text" name="NAME" size="30" value="<?php print($_COOKIE[TestCookieVariable::COOKIE_NAME]); ?>"/><br/> <input type="submit" value="Exec." /> </form> </body> </html> -------------------------------- ・TestCookieOut.php <?php require_once "./TestCookieVariable.class.php"; setCookie(TestCookieVariable::COOKIE_NAME, $_POST['NAME'], time() + (60 * 60 * 24 * 7)); ?> <html> <head> <title></title> </head> <body> <?php print($_POST['NAME']); ?> <a href="./TestCookieIn.php">前の画面に戻る</a> </body> </html> -------------------------------- ・TestCookieVariable.class.php <?php class TestCookieVariable { const COOKIE_NAME = 'TestCookieVariable.COOKIE_NAME'; } -------------------------------- 確かにsetCookieや$_COOKIEのパラメータにクラス定数を使用するというトリッキー(?)なことはやっていますが、保存はできるのに読み出しができないというのが、色々調べたのですがよく分かりません。 詳しい方いらっしゃいましたら、どうかご教授下さい。 ちなみに環境は、Windows Vista Home Premium(SP2)+xampp for Windows 1.7.3です。 どうか宜しくお願い致します。

    • ベストアンサー
    • PHP
  • apacheでcookieを扱いたい

    サーバーをapacheにしたらcookieがうまく動かなくなった。 以前、04WebServerを利用していた時のコード ・cookieの発行 print ("\r\n\r\n") print '<script language="javascript">' print 'document.cookie = "testcookie=1; path=/python"' print '</script>' ・cookieの削除 print ("\r\n\r\n") print '<script language="javascript">' print 'document.cookie = "testcookie=None; path=/python;" ' print '</script>' ・cookieの確認 if os.environ.has_key('HTTP_COOKIE'): cookie = Cookie.SimpleCookie() cookie.load(os.environ["HTTP_COOKIE"]) cookieValue = cookie["testcookie"].value 上記のようにcookie処理を行っており、 cookieを print すると Set-Cookie: testcookie=1 cookie["testcookie"].value から 1 が取得できました。 しかし、サーバーをApaheに変更したところ cookieを print すると Set-Cookie: Apache=4dcf77a5.50d1204a49e25 となってしまい、発行したはずのtestcookieは存在していません。 cookie["Apache"].value で取得できる値も 4dcf77a5.50d1204a49e25 とよくわからないものになっています。 何が問題なのか教えてください。

専門家に質問してみよう