ユーザーのログインに PHP 認証システムを使用しています。ユーザーのログインは正常に機能しますが、(任意のページで) ページを更新すると、セッション変数がリセットされ、ユーザーは「ログアウト」されます。すべてのページで session_start() を使用しています。ユーザーをログに記録して認証するためのファイル auth.php と authenticate.php があります。これはイライラする問題であり、助けていただければ幸いです。ここでコードを提供します:
auth.php:
<?php
function credentials_valid($email, $password) {
$email = mysql_real_escape_string($email);
$query = "SELECT `id`, `salt`, `password`
FROM `#######`
WHERE `email` = '$email' ";
$result = mysql_query($query);
if(mysql_num_rows($result)) {
$user = mysql_fetch_assoc($result);
$password_requested = sha1($user['salt'] . $password);
if($password_requested === $user['password']) {
return $user['id'];
}
}
return false;
}
//logs into the user $user
function log_in($user_id){
$_SESSION['user_id'] = $user_id;
}
//Returns the currently logged in user (if any)
function current_user(){
static $current_user;
if(!$current_user) {
if($_SESSION['user_id']){
$user_id = intval($_SESSION['user_id']);
$query = "SELECT *
FROM `#######`
WHERE `id` = $user_id";
$result = mysql_query($query);
if(mysql_num_rows($result)){
$current_user = mysql_fetch_assoc($result);
return $current_user;
}
}
}
return $current_user;
}
//Requires a current user
function require_login() {
if(!current_user()){
$_SESSION['redirect_to'] = $_SERVER["REQUEST_URI"];
header("Location: index.php");
exit("You must log in.");
}
}
?>
認証.php:
<?php
session_start();
require_once "database.php";
db_connect();
require_once "auth.php";
$user_id = credentials_valid($_POST['username'], $_POST['password']);
if($user_id){
log_in($user_id);
if($_SESSION['redirect_to']){
header("Location: " . $_SESSION['redirect_to']);
unset($_SESSION['redirect_to']);
}else{
header("Location: index.php");
}
}else{
header("Location: login.php?error=1");
exit("You are being redirected");
}
?>
ユーザーがログインしているページの1つで、phpヘッダーにこれがあります:
<?php
session_start();
require_once "database.php";
db_connect();
require_once "auth.php";
$current_user = current_user();
if(isset($_GET["logout"]) && $_GET["logout"]==1)
{
//User clicked logout button, distroy all session variables.
session_destroy();
header('Location: '.$return_url);
}
?>
システムが不安定です。ログイン直後にページを更新すると、セッション変数がすぐに破棄されることがあります。それ以外の場合、連続して数回更新した後、ユーザーはログインしたままになります。あなたが見ている問題を教えてください。ありがとうございました!