前提・実現したいこと
ログイン機能を作っております。
php5.6では成功しているものの7.0以降にすると、エラーがおきてしまいます。
自分では、よくわからないためエラーの対応を教えてください。
もしよければ、こちらのコード事態は正常かどうかのご意見をいただきたいです。
発生している問題・エラーメッセージ
login_form.php Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at hoge/login_form.php:1) in hoge/login_form.php on line 2 Warning: Cannot modify header information - headers already sent by (output started at hoge/login_form.php:1) in hoge/login_form.php on line 4 Warning: Cannot modify header information - headers already sent by (output started at hoge/login_form.php:1) in hoge/login_form.php on line 11
login_check.php Warning: session_regenerate_id(): Cannot regenerate session id - headers already sent in hoge/login_check.php on line 81 Warning: Cannot modify header information - headers already sent by (output started at hoge/db.php:1) in hoge/login_check.php on line 84
該当のソースコード
php
1<?php 2session_start(); 3 4header("Content-type: text/html; charset=utf-8"); 5 6//クロスサイトリクエストフォージェリ(CSRF)対策 7$_SESSION['token'] = base64_encode(openssl_random_pseudo_bytes(32)); 8$token = $_SESSION['token']; 9 10//クリックジャッキング対策 11header('X-FRAME-OPTIONS: SAMEORIGIN'); 12 13?> 14 15<!DOCTYPE html> 16<html> 17<head> 18<title>ログイン画面</title> 19<meta charset="utf-8"> 20</head> 21<body> 22<h1>ログイン画面</h1> 23 24<form action="login_check.php" method="post"> 25 26<p>アカウント:<input type="text" name="account" size="50"></p> 27<p>パスワード:<input type="text" name="password" size="50"></p> 28 29<input type="hidden" name="token" value="<?=$token?>"> 30<input type="submit" value="ログインする"> 31 32</form> 33<a href="hoge/sendmail.php">新しくアカウントを作成</a> 34 35</body> 36</html>
<?php session_start(); header("Content-type: text/html; charset=utf-8"); //クロスサイトリクエストフォージェリ(CSRF)対策のトークン判定 if ($_POST['token'] != $_SESSION['token']){ echo "不正アクセスの可能性あり"; } //ここで処理が止まってしまう。 ?> </body> </html>
試したこと
output_buffering=On やbom付等の確認。session_start,headerの位置。
補足情報(FW/ツールのバージョンなど)
visualstadio 2019 ,ffftp
valudominサーバー エコプラン
なんとも言えませんがまずはBOMを疑ってみては?
php.iniを新旧比較するとか。
bomは確認しました。
念のため、確認方法
1ソースコードをメモ帳にコピー
2.名前付くで保存するときにutf8で保存
です。
php.iniについても、主要なところは確認しました。
同じでした。
他のところも見てみます。
表示できない文字(空白)が無いか、改行コードを変えてみるとか…
関係ないと思うけど DOCTYPE の上の空行を削除してみたら?
login_form.php の <?php の前に何か記述(改行とか)がありませんか?
もしかすると表示されない文字でうまく削除できていない可能性も考え、ファイルを新しく作り、<?php を入力、それ以降をコピペして上書きした後の結果を教えてください。
いったんHTTPヘッダを出力しないようにして、Warningがない状態で表示させてみて、意図しない出力がないか調べてみたらどうでしょうか?
yuki84web様、takashims20様、te2ji様
特にスペースを削除してみても変わりはありませんでした。
また、新しくファイルを作成しスペースを作らないようにコピペをしてもやはり変わりはありませんでした。
ありがとうございました。
m6u様
php.iniに関して
5.6から7にかけての変更点は無いようです。
ochkeghen様
>いったんHTTPヘッダを出力しないようにして、
すみません。方法を教えてもらえないでしょうか?
> 方法を教えて
session_start()やheader関数の実行をコメントアウトします。後で戻すのを忘れないようにバックアップをとっておきましょう。
ockeghem様
>session_start()やheader関数の実行を
結果、何も出力されません。
これで、大丈夫なのでしょうか?
wget か curlでダウンロードして、本当に何も出力されていないか(空白や制御文字も含めて)確認するとよいです。
回答1件
あなたの回答
tips
プレビュー