セッションを使用してユーザーを自分のサイトにログインしています。
ログインフォームは、入力をlogin-execファイルに送信します。このファイルは、dbにクエリを実行し、ログイン情報を検証します。login-execファイルの先頭に配置session_start();
し、以下のスニペットを使用してセッションにデータを書き込みました。
session_regenerate_id();
$member = mysql_fetch_assoc($result);
$_SESSION['SESS_MEMBER_ID'] = $member['id'];
$_SESSION['Username'] = $member['username'];
$_SESSION['key'] = $member['Serial'];
session_write_close();
header('Location: account.php');
account.phpファイルの先頭で、セッションを検証するためにauth.phpが必要です。
account.php:require_once('auth.php');
auth.php:
<?php
//Start session
session_start();
//Check whether the session variable SESS_MEMBER_ID is present or not
if(!isset($_SESSION['SESS_MEMBER_ID']) || (trim($_SESSION['SESS_MEMBER_ID']) == '')) {
header("Refresh: 5; url=login.php");
//echo $_SESSION['SESS_MEMBER_ID'];
die("Access Denied!");
exit();
}
?>
常に最初にログインすると、アクセスが拒否されたことが返されます。スクリプトがログインページにリダイレクトして再試行すると、常に機能します...セッションが開始される前に先頭の空白があると当初思っていたので、PHPファイルをBOMなしでUTF-8に保存しました。それは問題を解決しませんでした、そして私は本当にこれを理解することができません。
なぜこれが起こっているのかについてのアイデアはありますか?