我正在使用會話將用戶登錄到我的網站。這是我的PHP會話的問題嗎?
登錄表單將輸入發送到login-exec文件,然後查詢db並驗證登錄信息。我已經把session_start();
在登錄-EXEC文件的開頭,然後用下面的代碼片段將數據寫入到會話:在account.php文件的開頭
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');
我已經要求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文件保存爲UTF-8沒有BOM,因爲我原本以爲在會話開始之前就有了空白。這並沒有解決這個問題,我真的不知道這一點。
任何想法爲什麼會發生這種情況?
它可能對session_write_close()有一些幫助。呼叫。我對這些代碼片段的執行順序感到困惑。 –
我想刪除'session_write_close()'調用。 –
我刪除了session_write_close(),並且發生了相同的結果。 事件觸發的順序如下所示:將登錄帖子數據登錄到login-exec.php,驗證並將驗證的信息寫入會話,然後login-exec.php將用戶轉發給account.php。在account.php中,我要求auth.php檢查是否已設置SESS_MEMBER_ID。 IT是auth.php,它首次拋出該問題,但後來隨時可以工作,只要我不清除緩存即可。 – Drew