• ベストアンサー

クッキー認証>クッキー削除ができない!!

今回は、クッキー認証画面を作成している際、 エラーが出てしまって先に進めず投稿しました。 下記にプログラム記載 ----H_01.html---------------------------------- <html> <head> <title>クッキー認証</title> </head> <body> <center> <form method="POST" action="H_02.php"> 名前<input type="text" name="name"> パスワード<input type="Password" name="pass"> cookieを記録する<input type="checkbox" name="chk"> <input type="submit" value="送信"> <input type="reset" value="リセット"> </form> </center> </body> </html> ------------------------------------------------ -----H_02.php---------------------------------- <?php $name = $_COOKIE['name']; $pass = $_COOKIE['pass']; $cnt = $_COOKIE['chk']; if ($cnt == True) { $lim = time()+7*24*60*60; //有効期限1週間 setcookie('name',$name,$lim); setcookie('pass',$pass,$lim); } else { setcookie('name'); setcookie('pass'); } ?> ------------------------------------------------ else文内の、setcookie二行にエラーが出ます。 htmlでチェックボックスにチェックが施されていない場合、クッキーを削除。 調べてみたのですが、どうしたらよいのかわからず 投稿しました。よろしくお願いします。

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

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

  • ベストアンサー
  • vitadai
  • ベストアンサー率75% (6/8)
回答No.5

Linux・Apache・PHP4.3.9で確認したところではエラーは出ませんでしたので、Windosでの挙動が違うのかなーと思います。 エラーメッセージを見る限りでは、クッキーをセットする前に何らかの出力が行われているからだと思うのですが。 参考URLを見てヘッダーを調べてみてください。

参考URL:
http://php.s3.to/man/function.headers-sent.html

その他の回答 (5)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.6

#4でエラーになってるのって setcookieしてすぐ、クッキー使おうとしているからじゃないかな? リロードしてからじゃないと使えない。 あと、やっぱりなんかHTML書いてるんじゃないかな?

  • vitadai
  • ベストアンサー率75% (6/8)
回答No.4

cookie.html <html> <head> <title>クッキー認証</title> </head> <body> <form method="post" action="cookie.php"> 名前<input type="text" name="name"> パスワード<input type="Password" name="pass"> cookieを記録する<input type="checkbox" name="chk" value="on"> <input type="submit" value="送信"> <input type="reset" value="リセット"> </form> </body> </html> cookie.php <?php if($_POST['chk'] == 'on'){ $lim = time()+3600; setcookie('test-name',$_POST['name'],$lim); setcookie('test-pass',$_POST['pass'],$lim); print 'on<br>'; print $_COOKIE["test-name"] . '<br>'; print $_COOKIE["test-pass"]; }else{ setcookie('test-name'); setcookie('test-pass'); print 'off<br>'; print $_COOKIE["test-name"] . '<br>'; print $_COOKIE["test-pass"]; } ?> これでエラーは出ません。

hiki_zero_
質問者

補足

上記をそのまま打ち込んで、 実行してみたところ。 最初と同じエラー ------------------------------------------ Warning: Cannot modify header information - headers already sent by (output started at C:\phpdocs\cookie.php:2) in C:\phpdocs\cookie.php on line 6 Warning: Cannot modify header information - headers already sent by (output started at C:\phpdocs\cookie.php:2) in C:\phpdocs\cookie.php on line 7 on -------------------------------------------- 上記のようにエラーが出ます。 【setcookie('test-name',$_POST['name'],$lim);】 【setcookie('test-pass',$_POST['pass'],$lim);】 がエラーとなります。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#2です、 引数って省略できますね。 削除するんじゃなかったんですか? #1のエラーですが、 ヘッダ情報は最初に送るべきであるというヤツの気がします。

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

補足

削除は、前のhtml内のcookieチェックをはずし送信後、戻るボタンを押したときに クッキーありの場合だったら名前などが残るが、 チェックをはずして戻った場合は削除されて 空白状態になる。(名前記入欄並びパスワード) ヘッダ情報を最初に送るべきというのがいまいちわかりません。 参照サイトを見ましたが・・・

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

setcookieって引数省略できましたっけ? 削除するなら setcookie('name','',time()); でいいと思います。 上記のようにすると 値がなくなる、ブラウザ終了時には、有効期限が切れるので削除される。

hiki_zero_
質問者

補足

ブラウザ終了時に削除されずに次回ブラウザ開いたときにも反映されるので、 今回、setcookie('name','',time()); を使わないことを前提にしています。

  • vitadai
  • ベストアンサー率75% (6/8)
回答No.1

色々と間違っています。 とりあえず $name = $_COOKIE['name']; $pass = $_COOKIE['pass']; $cnt = $_COOKIE['chk']; ここがおかしいです。 setcookie()については参考URLを見てみてください。 #どんなエラーメッセージか書いたり、PHPのバージョンなどを示すと適切な回答があるかもしれません。

参考URL:
http://manual.xwd.jp/function.setcookie.html
hiki_zero_
質問者

補足

$name = $_COOKIE['name']; $pass = $_COOKIE['pass']; $cnt = $_COOKIE['chk']; 上記3つの点に関してはわかりました。 >setcookie()については参考URL これについては、もう前に見ております。 画面に出たエラーを下記に記載 Warning: Cannot modify header information - headers already sent by (output started at C:\phpdocs\H_02.php:2) in C:\phpdocs\H_02.php on line 24 Warning: Cannot modify header information - headers already sent by (output started at C:\phpdocs\H_02.php:2) in C:\phpdocs\H_02.php on line 25 PHPバージョン4.3.2.2 です。

関連するQ&A

  • PHPでのクッキー

    PHPでクッキーを使い、下記のような入力フォームを作りました。 form.phpで入力→form2.phpで正常出力出来るのですが、 直接form2.phpへ飛ぶと、クッキーの値がなくなってしまいます。 setcokkieが、何の値もないのを上書きしていることは理解できるのですが、これを上書きせず回避?する方法はありますでしょうか? よろしくお願いします。 【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 $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
  • クッキーが保存されずに困っています

    どなたか、詳しい方がおりましたらアドバイスをお願い いたします。私はプログラムを仕事としている者では ありませんが、独学でPHPを勉強しております。 クッキーが保存されなくて困っています。 以下の部分です。 クッキーの有効期間は設定していませんが、ブラウザを 閉じずにテストしていての情況です。 ---------------------------------------------------- ファイル名:rogin.php <?php setcookie("userck","ckdata=100"); print $_COOKIE[userck]; ?> <html> <body> <br><br><br> <center> <table border="1"> <form method="post" action="<?=*********"> <tr> <td> Email: </td> <td><input type="text" name="data1" size="30"> </td> </tr> <tr> <td> pass: </td> <td><input type="text" name="data2" size="30"> </td> <tr> <td colspan="2" align="center"> <input type="submit" name="sousin" value="送信"> </td> </tr> </form> </center> </body> </html> ---------------------------------------------------- どうしてクッキーが保存されないのか自分なりにいろいろと 調べたり、テストをしてみたりしました。 テストの内容 test1.php <?php setcookie("userck","ckdata=100"); ?> test2.php <?php print $_COOKIE[userck]; ?> 上の2つのファイルを作成して、test2.phpで出力してくるか どうかを試してみますと、問題なく「data=10」が出力されて きます。(保存されているかどうかだけを調べたいので、 parse_strは省略しています。) ところが、問題のrogin.phpでクッキーを保存して別のファイル で$_COOKIE[userck]を取得しようとしてもどうやら保存されて いないようです。 rogin.phpの内部に記載した、print $_COOKIE[userck];では ckdata=100は出力してきます。 それではと思い、test1.phpでセットしたクッキーはrogin.phpで 取得できるのかどうかをテストしてみますと、無事に取得できます。 setcookie()の前にはHTMLの出力はありません。 クッキー名にアンダーバーも使っていません。 何か、php.iniに関係するのかと思い、一応iniファイルに output_buffering = On を書き足したりもしました。 クッキーが保存されない原因で、考えられることはどんなこと なのかが知りたいです。 どなたか、お分かりになる方アドバイスをお願いできないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • クッキーについて質問が御座います

    phpのクッキーについての質問です。 皆様どうぞよろしくお願い致します。 phpでのクッキーを利用したプログラムを始めて 作成しようと思っているのですが、 /* test1.php */ <form method="POST" action="cookieTest.php"> <input type="text" name="id" /> <input type="submit" value="送信" /> </form> /* cookieTest.php */ $id = $_POST['id']; setcookie("cookieId",$id, time() + 7200); // クッキーのセット echo $_COOKIE["cookieId"]; 上記のようにtest1.phpからフォームにてcookieTest.phpへPOSTにて「aaaaa」という文字を送信した場合にcookieTest.phpにて、 echoにてクッキーが表示できません。 その後ブラウザの更新ボタンを1度押すと「aaaaa」が表示されるようになります。 更新を押さなければクッキー内容が表示されないのはどのような原因が考えられますでしょうか?どうぞ皆様よろしくお願い致します。

    • 締切済み
    • PHP
  • クッキーの削除方法

    PHP5にて以下のようにクッキーを連想配列でセットしています。 setcookie("cookie[1]", "10", time()+600); setcookie("cookie[2]", "20", time()+600); setcookie("cookie[10]", "100", time()+600); この場合、一部のクッキー(例えばcookie[2]で設定したもの) だけを削除するにはどうすれば宜しいのでしょうか? 試しに以下の様に記述してみましたが、上手く削除されませんでした。 setcookie("cookie[2]"); また、全てのクッキー(全ての連想配列)を いっぺんに削除する方法もありましたら、お教えください。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • クッキーがよくわかりません

    クッキーの利用の仕方が不明です。 ↓以下のようなプログラムを↓をコピペしてきたのですが、よくわかりません…$data=$_COOKIE["data"];の部分でエラー発生します。 どういうことでしょうか? http://w1.nirai.ne.jp/freeze/main/files/10_01_cookie.html <?php       //クッキーは<html>よりも先に記述する $data=$_COOKIE["data"];     //まずクッキーを読み出す  if(!isset($data)){       //何もデータが無ければ   $data = $_POST['data'];   //postで受け取ったデータを  }else{             //クッキーデータがあれば   $data = $data."<br>".$_POST['data'];    //前のデータに新しいデータをくっつける  } setcookie("data", $data, time()+60*10);    //そしてそのデータを60秒×10つまり10分間記憶する ?> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>クッキーで、すぐ消える一行メモ</title> </head> <body> クッキーで、すぐ消える一行メモ<br> 文章を入力して表示クリックを、何度か繰り返してください。10分で消えます。<br> <form action="10_01_cookie.php" method="post"> <input type="text" name="data" size="50"> <input type="submit" value="表示!"> </form> <!--ここからPHPが始まります。--> <?php echo $data;    //入力された文を改行をはさんで記憶しているので、それを記述する ?> <!--これでPHPは終わりです。--> </body> </html>

    • ベストアンサー
    • PHP
  • クッキーの削除がうまくいきません

    <?php setcookie("a","おいしいクッキー"); $a=$_COOKIE["a"]; print "$a"; print "<br />"; setcookie("a","",time()-60); $b=$_COOKIE["a"]; print "$b"; ?> と書いて、クッキーの設定は出来たのですが、有効期限を過去にしても クッキーが削除されずにエラーメッセージが出ます。 エラーメッセージ Warning: Cannot modify header information - headers already sent by (output started at C:\Eclipse\workspace\PHP\cookie.php:7) in C:\Eclipse\workspace\PHP\cookie.php on line 11 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • クッキーについて

    setcookie('hoge')したものを、 ディレクトリー違いで$_COOKIE['hoge']したいのですが、 うまく出来ません。方法を教えて下さい。 または、認証ページで認証OKなら、 クッキーをセットして./abc/hoge.phpへ移動 認証NGならクッキーを開放して./def/hogehoge.phpへ ページ移動をさせたいです。 お手数をお掛け致しますが、宜しくお願いします。

    • 締切済み
    • PHP
  • サイト内にGoogleサイトを表示する方法

    こんにちは。 先日からPHPでメタサーチを作っています。 先日の質問 http://okwave.jp/qa/q7027045.html 複数の検索サイト(Yahoo!、Google等)から選択し、 検索窓に入力した値を検索サイトに送り、 iframe内に表示するようにしました。 しかし本日の昼頃から、Googleの検索結果が表示されなくなりました。 IE9では 「この Web サイトに入力する情報のセキュリティを保護するため、このコンテンツの発行者はフレーム内での表示を許可していません。」 と表示され、 FireFox、chromeではエラーすら表示されません。 iframeに問題があるのでしょうか? objectタグ使用でも変化がなく、 php includeでも表示されませんでした。 Googleの公式サイトを表示する、他の方法がありますでしょうか? ご教示お願い致します。 以下、ソースです。 search5.php <?php if (isset($_GET["keyword"])){ $keyword=$_GET["keyword"]; }else{ $keyword=""; } $keyword4url=urlencode($keyword); ?> <?PHP if (isset($_COOKIE["chk_1"])){ $checked["chk_1"]=" checked"; }else{ $checked["chk_1"]=""; } if (isset($_COOKIE["chk_2"])){ $checked["chk_2"]=" checked"; }else{ $checked["chk_2"]=""; } print_r($_COOKIE); ?> <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script type="text/javascript"> function P1(w1){parent.frame1.location.href=w1} function setCookie(key,val,url){ tmp = key+"="+escape(val)+";"; tmp += "expires=Fri, 31-Dec-2030 23:59:59;"; if(url){ tmp += "domain="+getDomain(url)+";"; tmp += "path="+getDomainPath(url)+";"; } document.cookie = tmp; }; function delCookie(key){ expiredate = new Date(); expiredate.setYear(expiredate.getYear()-1); tmp = key+"=;"; tmp += "expires="+expiredate.toGMTString(); document.cookie = tmp; }; function set_cookie_radio(){ delCookie("chk_1"); delCookie("chk_2"); if(document.getElementById("chk_1").checked) setCookie("chk_1","1"); if(document.getElementById("chk_2").checked) setCookie("chk_2","1"); } function del_cookie_radio(){ delCookie("chk_1"); delCookie("chk_2"); } </script> </head> <body> <center> <form action="search5.php" method="get"> キーワード:<input type="text" name="keyword" size="20" value="<?php echo $keyword;?>" onfocus="this.select()"> を <input type="submit" value="検索する"> </form> <form> <input type="button" value="クッキー削除" onclick="del_cookie_radio()"> </form> <form> <input id="chk_1" type="radio" name="RB1" onClick="P1('http://search.yahoo.co.jp/search?p=<?php echo $keyword4url; ?>');set_cookie_radio()" <?PHP echo $checked["chk_1"];?>>Yahoo! <input id="chk_2" type="radio" name="RB1" onClick="P1('http://www.google.co.jp/#q=<?php echo $keyword4url; ?>');set_cookie_radio()" <?PHP echo $checked["chk_2"];?>>Google </form> <iframe src="http://search.yahoo.co.jp/search?p=<?php echo $keyword4url; ?>" name="frame1" frameborder="1" scrolling="auto" width="977" height="600"> </iframe> </center> </body> </html>

  • 管理パスワードによる認証

    既存のファイルに管理者による認証を付加したいと思いますが、下記のコードではうまくいきません。アドバイス下さい。 <?php //パスワードの設定 $password = "admin"; //パスワードチェック passchk(); function passchk(){ global $password, $post; $p = $post['pass']; if ($p == $password) { echo "認証成功!"; // return; } else { echo<<<EOM <p>パスワードを確認して下さい。</p><br> <form action="login.php" method="post"> パスワード:<input type="password" name="pass" size="8"> <input type=submit value="ログイン" /> </form> EOM; exit; } } ?>

    • 締切済み
    • PHP
  • 認証について

    下記、認証画面を作成しましたが、 「kokousr」DBに存在しないUSERID,USERPASSを入力しても、ログインできてしまいます。 存在しないUSERをログインさせないためには、どこを変更すればよろしいのでしょうか? よろしくお願いします。 <?php function chk_auth() { global $conn; global $uid; global $upass; if ($uid and $upass) { $sql = "SELECT * FROM kokousr where uid = '".cnv_sqlstr($uid)."'" ." and pass = '".cnv_sqlstr($upass)."'"; $res = mysql_query($sql, $conn) or die("データ抽出エラー"); $row = mysql_fetch_array($res, MYSQL_ASSOC); if (mysql_num_rows($res) >= 1) { return TRUE; } else { return FALSE; } } else { return FALSE; } } function gamen_log() { ?> <h2>ログイン画面</h2> <form method="post" action="./itiran.php"> <table border="1"> <tr> <td>ユーザID</td> <td><input type="text" name="uid"></td> </tr> <tr> <td>パスワード</td> <td><input type="password" name="upass"></td> </tr> </table> <input type="hidden" name="act" value="ent"> <input type="submit" name="sub" value="ログイン"> </form> <?php conndb(); if (!chk_auth()) { $act = "log"; } ?> <html> <head> <meta http-equiv="content-type" content="text/html; charset=x-sjis"> <title>ログイン</title> </head> <body> <?php gamen_log(); ?> </body> </html>

    • ベストアンサー
    • PHP