Используя скрипт, который я ранее использовал для запуска и сохранения сеанса, за исключением того, что вместо того, чтобы пользователь вводил пароль, я использую windows имя пользователя для входа и проверяю, существуют ли они уже в таблице пользователей.
На странице индекса. php вот как я регистрирую Windows логин:
<form>
<h3><?php echo $_SERVER['REMOTE_USER']; ?></h3>
<input type="hidden" id="winUser" value="<?php echo $_SERVER['REMOTE_USER']; ?>" />
<button type="button" id="loginSubmit">Sign in</button>
</form>
Вот jQuery для захвата идентификатора winUser:
$('#loginSubmit').on('click', function()
{
var winUser = $('#winUser').val();
$.post('windowsUserCheck.php', {winUser:winUser}, function(data)
{
if(data.indexOf("Error") >= 0)
{
$('#errorModal').modal('show');
return false;
}
else
{
location.href = "home.php";
}
});
});
Вот процесс, называемый windowsUserCheck. php:
<?php
include("include/sessions.php");
if(isset($_POST['winUser']))
{
$windowsusername = $_POST['winUser'];
$sql = 'SELECT `uid`, `username`, `fullname`, `department`, `email`, `password`, `userlevel` FROM users WHERE `username` = :username';
$sth = $dbc->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':username' => $windowsusername));
$res = $sth->fetchAll(PDO::FETCH_ASSOC);
$numrows = count($res);
if($res[0])
{
$_SESSION['user']['uid'] = $res[0]['uid'];
$_SESSION['user']['username'] = $res[0]['username'];
$_SESSION['user']['department'] = $res[0]['department'];
$_SESSION['user']['fullname'] = $res[0]['fullname'];
$_SESSION['user']['email'] = $res[0]['email'];
$_SESSION['user']['userlevel'] = $res[0]['userlevel'];
echo "Success";
}
else
{
echo "Error";
}
}
?>
А вот сеансы. php:
<?php
if(!isset($_SESSION['user']['username'])){session_start();}
include("connection.php");
$id = $_SESSION['user']['uid'];
$username = $_SESSION['user']['username'];
$department = $_SESSION['user']['department'];
$fullname = $_SESSION['user']['fullname'];
$useremail = $_SESSION['user']['email'];
$userlevel = $_SESSION['user']['userlevel'];
?>
Вверху каждого страницу на сайте, я включил несколько сценариев, которые сначала проверяют, пытается ли пользователь перейти на страницу без входа в систему. После того, как они вошли в систему, я проверяю, является ли имя пользователя пустым или имеет значение «гость», и если это так, выйдите из системы:
<?php
include("include/sessions.php");
if(!isset($_SESSION['user']['username']) || $username == ""){header("location:index.php");}
?>
Используя все вышеперечисленное, пользователь может войти в систему. Проблема в том, что при обновлении страницы пользователь отправляется обратно в индекс. php. Это заставляет меня верить, что сеанс очищается или уничтожается, но я не уверен, каким образом.
Почему это может происходить?
Редактировать
Я обнаружил, что это проблема возникает только в Chrome. Я могу оставаться в системе весь день, используя Firefox или Edge.