- ベストアンサー
クッキー認証>クッキー削除ができない!!
今回は、クッキー認証画面を作成している際、 エラーが出てしまって先に進めず投稿しました。 下記にプログラム記載 ----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でチェックボックスにチェックが施されていない場合、クッキーを削除。 調べてみたのですが、どうしたらよいのかわからず 投稿しました。よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
Linux・Apache・PHP4.3.9で確認したところではエラーは出ませんでしたので、Windosでの挙動が違うのかなーと思います。 エラーメッセージを見る限りでは、クッキーをセットする前に何らかの出力が行われているからだと思うのですが。 参考URLを見てヘッダーを調べてみてください。
その他の回答 (5)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#4でエラーになってるのって setcookieしてすぐ、クッキー使おうとしているからじゃないかな? リロードしてからじゃないと使えない。 あと、やっぱりなんかHTML書いてるんじゃないかな?
- vitadai
- ベストアンサー率75% (6/8)
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"]; } ?> これでエラーは出ません。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#2です、 引数って省略できますね。 削除するんじゃなかったんですか? #1のエラーですが、 ヘッダ情報は最初に送るべきであるというヤツの気がします。
補足
削除は、前のhtml内のcookieチェックをはずし送信後、戻るボタンを押したときに クッキーありの場合だったら名前などが残るが、 チェックをはずして戻った場合は削除されて 空白状態になる。(名前記入欄並びパスワード) ヘッダ情報を最初に送るべきというのがいまいちわかりません。 参照サイトを見ましたが・・・
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
setcookieって引数省略できましたっけ? 削除するなら setcookie('name','',time()); でいいと思います。 上記のようにすると 値がなくなる、ブラウザ終了時には、有効期限が切れるので削除される。
補足
ブラウザ終了時に削除されずに次回ブラウザ開いたときにも反映されるので、 今回、setcookie('name','',time()); を使わないことを前提にしています。
- vitadai
- ベストアンサー率75% (6/8)
色々と間違っています。 とりあえず $name = $_COOKIE['name']; $pass = $_COOKIE['pass']; $cnt = $_COOKIE['chk']; ここがおかしいです。 setcookie()については参考URLを見てみてください。 #どんなエラーメッセージか書いたり、PHPのバージョンなどを示すと適切な回答があるかもしれません。
補足
$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 です。
補足
上記をそのまま打ち込んで、 実行してみたところ。 最初と同じエラー ------------------------------------------ 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);】 がエラーとなります。