プロが教えるわが家の防犯対策術!

今回は、クッキー認証画面を作成している際、
エラーが出てしまって先に進めず投稿しました。
下記にプログラム記載
----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でチェックボックスにチェックが施されていない場合、クッキーを削除。
調べてみたのですが、どうしたらよいのかわからず
投稿しました。よろしくお願いします。

A 回答 (6件)

#4でエラーになってるのって


setcookieしてすぐ、クッキー使おうとしているからじゃないかな?
リロードしてからじゃないと使えない。

あと、やっぱりなんかHTML書いてるんじゃないかな?
    • good
    • 0

Linux・Apache・PHP4.3.9で確認したところではエラーは出ませんでしたので、Windosでの挙動が違うのかなーと思います。


エラーメッセージを見る限りでは、クッキーをセットする前に何らかの出力が行われているからだと思うのですが。
参考URLを見てヘッダーを調べてみてください。

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

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"];
}

?>
これでエラーは出ません。

この回答への補足

上記をそのまま打ち込んで、
実行してみたところ。
最初と同じエラー
------------------------------------------
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);】
がエラーとなります。

補足日時:2004/10/30 14:48
    • good
    • 0

#2です、


引数って省略できますね。
削除するんじゃなかったんですか?

#1のエラーですが、
ヘッダ情報は最初に送るべきであるというヤツの気がします。

参考URL:http://jp2.php.net/manual/ja/function.setcookie. …

この回答への補足

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

補足日時:2004/10/30 14:54
    • good
    • 0

setcookieって引数省略できましたっけ?


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

この回答への補足

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

補足日時:2004/10/30 02:23
    • good
    • 0

色々と間違っています。


とりあえず
$name = $_COOKIE['name'];
$pass = $_COOKIE['pass'];
$cnt = $_COOKIE['chk'];
ここがおかしいです。
setcookie()については参考URLを見てみてください。

#どんなエラーメッセージか書いたり、PHPのバージョンなどを示すと適切な回答があるかもしれません。

参考URL:http://manual.xwd.jp/function.setcookie.html

この回答への補足

$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
です。

補足日時:2004/10/30 02:25
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!