Привет всем! Помогите пожалуйста найти ошибку.
При аутентификации как видно из кода должны присваиваться значения глобальной переменной $_SESSION
и происходить редирект на другую страницу. Но почему-то ничего не происходит.
init.php
<?php
error_reporting(-1);
ini_set('display_errors','On');
use Parsclick\Sessions\PersistentSessionHandler;
require_once '../vendor/autoload.php';
require_once __DIR__ . '/db_connect.php';
$handler = new PersistentSessionHandler($db);
session_set_save_handler($handler);
session_start();
$_SESSION['active'] = time();
login.php
<?php
require_once './includes/init.php';
if (isset($_POST['login'])) {
$username = trim($_POST['username']);
$pwd = trim($_POST['pwd']);
$stmt = $db->prepare('SELECT pwd FROM `users` WHERE username = :username');
$stmt->bindParam(':username', $username);
$stmt->execute();
$stored = $stmt->fetchColumn();
if (password_verify($pwd, $stored)) {
session_regenerate_id(true);
$_SESSION['username'] = $username;
$_SESSION['authenticated'] = true;
if (isset($_POST['remember'])) {
// create persistent login
$autologin = new AutoLogin($db);
$autologin->persistentLogin();
}
header('Location: restricted1.php');
exit;
} else {
$error = 'Login failed. Check username and password.';
}
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Auto Login</title>
</head>
<body>
<h1>Persistent Login</h1>
<?php
if (isset($error)) {
echo "<p>$error</p>";
}
?>
<form action="<?= $_SERVER['PHP_SELF']; ?>" method="post">
<p>
<label for="username">Username:</label>
<input type="text" name="username" id="username">
</p>
<p>
<label for="pwd">Password:</label>
<input type="password" name="pwd" id="pwd">
</p>
<p>
<input type="checkbox" name="remember" id="remember">
<label for="remember">Remember me </label>
</p>
<p>
<input type="submit" name="login" id="login" value="Log In">
</p>
</form>
</body>
</html>
А просто страница login.php выдает 3 таких ошибки по отношению к трем свойствам
Strict standards: Parsclick\Sessions\MysqlSessionHandler and Parsclick\Sessions\PersistentProperties define the same property ($table_sess) in the composition of Parsclick\Sessions\PersistentSessionHandler. This might be incompatible, to improve maintainability consider using accessor methods in traits instead. Class was composed in /path/to/project/test.loc/Parsclick/Sessions/PersistentSessionHandler.php on line 65
и 2 ошибки по отношению к сессиям
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /path/to/project/test.loc/Parsclick/Sessions/PersistentSessionHandler.php:65) in /path/to/project/test.loc/test/includes/init.php on line 11
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /path/to/project/test.loc/Parsclick/Sessions/PersistentSessionHandler.php:65) in /path/to/project/test.loc/test/includes/init.php on line 11
По порядку.
В сообщениях, которые касаются login.php
- вам там вполне понятно объясняют, что у вас в классах, которые вы используете, переопределяется свойство $table_sess
- это позволительно, но в целом неверно. Найдите, где и в каких классах оно у вас объявлено, и оставьте только в одном из них, либо назовите его иначе в одном из классов, если хранимое там значение на самом деле обозначает не одно и то же.
В сообщениях, которые касаются сессий, вам точно также пишут, что все, касаемое заголовков http
-ответа, должно быть передано до вывода тела ответа. Если по-русски, то то, что ваш браузер получает в headers
(не путать с тегами head
/header
в html
), веб-сервер должен отправить до того, как отправить собственно тело ответа, то есть в вашем случае это саму html-страницу, а точнее - сделать первый вывод чего бы то ни было, например вывести что-либо через echo
или просто закрыть тег <?php ?>
и напечатать после него какой-либо текст.
Если взять это за правило и выводить все, что должно быть в хедерах (а это и про сессии, и про кеширование, которые у вас упомянуты в ошибках), то все будет работать верно.
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Установил Composer, обновил его, установил yii2, перехожу в браузер для проверки,а вместо "приветствия" выдает следующие ошибки :
Этот код отправляет на устройство c идентификатором ids пуш уведомление