РЕДАКТИРОВАТЬ: После жалобы о назначении себе ответ, я хочу обновить, что предоставленные ответы не были удовлетворительными.Никто не вышел и прямо не сказал, что это ваша проблема, сделайте это, и у вас будет решение.Простых предложений недостаточно для получения награды за вознаграждение.Наконец, проблема была с настройками сервера, и после некоторого исследования серверных сессий и изучения Stackoverflow / Serverfault я смог определить, как лучше всего решить эту проблему.Поэтому я не чувствовал, что было бы несправедливо отмечать мой собственный ответ как правильный.
У меня есть система аутентификации на основе php, которая использует LDAP для проверки личности и использует сеансы для поддержания статуса аутентификации пользователей.,
В последнее время я заметил, что он, похоже, подталкивает меня к странице входа, как будто мой сеанс истек.Проблема в том, что, по-видимому, по какой-то конкретной причине я не заметил, и я не уверен, как отладить / протестировать что-то подобное.
Вот моя функция аутентификации, которая запускает сеанс:
function authenticateUser($user, $password){
//assuming ldap connection and verification of user login/pass
//this is what will happen with authenticate user which is called
//when user submits login/pass on authentication form.
$_SESSION['id'] = $uID;
$time = time();
$_SESSION['time'] = $time;
$_SESSION['lastActivity'] = $time;
$_SESSION['expiration'] = $time+$cookieExpiration;
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['secret'] = md5(rand());
$_SESSION['userHash'] = getSessionHash();
$_SESSION['firstLogin'] = isFirstLogin($user);
//assign cookie to user and log authentication
giveCookie("userHash", $_SESSION['userHash'],0);
logAuthenticationAttempt($user, $_SERVER['REMOTE_ADDR'], 1);
return true;
}//end authenticateUser
Функция cookie:
function giveCookie($name, $value, $expiration=0){
global $path, $site;
setcookie("userHash", $_SESSION['userHash'], $expiration, $path, $site, true, true);
}//end giveCookie
Вот моя функция, которая вызывается на каждой странице для проверкиПользователь проходит проверку подлинности, прежде чем разрешить ему выполнить действие, требующее проверки подлинности:
function isValidUser(){
global $links; global $userName; global $userID; global $cookieExpiration;
if(isset($_COOKIE['userHash']) and isset($_SESSION['userHash'])){
if($_COOKIE['userHash'] == $_SESSION['userHash']){
$userName = $_SESSION['nameN'];
$userID = $_SESSION['id'];
//update userHash cookie for additinoal expiration time this way session
$time = time();
$expiration = $time+$cookieExpiration;
$_SESSION['lastActivity'] = $time;
giveCookie("userHash", $_SESSION['userHash'],0);
$_SESSION['expiration'] = $expiration;
return true;
}
}
return false;
}//end isvalidUser()
Буду признателен за любые советы или отзывы о том, как это проверить.Я пытаюсь выяснить, почему иногда после выполнения какого-либо действия меня возвращают на страницу входа.
На странице, которая запрашивает аутентификацию, то, что я делаю вверху, выглядит следующим образом:
if(!isValidUser()){changePage($links['login']."?refer=".$links['requestHelp']);}
//note: changePage is just a function for header("location: somepage.php");