Я довольно новичок в PHP, но я пытаюсь тренироваться. Со вчерашнего дня у меня проблема, которую я даже не могу понять, я думал, что мой код был правильным, но кажется неправильным
Так вот моя функция, чтобы разрешить страницы только для зарегистрированных пользователей
functions.php
function logged_only()
{
if(session_status() == PHP_SESSION_NONE)
{
session_start();
}
if(!isset($_SESSION['auth']))
{
$_SESSION['flash']['danger'] = "You can't enter this page - not logged in";
header('Location: login/login.php');
exit();
}
}
Так что он должен перенаправить меня на страницу входа, если я не вошел, просто
login.php
elseif(password_verify($_POST['password'], $user->password)){
$_SESSION['auth'] = $user;
$_SESSION['flash']['success'] = 'You're now connected';
header('Location: ../profile.php'); // user's homepage
exit();
Есть некоторый код выше и ниже, но он работает довольно хорошо.
Таким образом, в этом случае скрипт должен вставить информацию о пользователе в его $ _SESSION, но он только перенаправляет меня в login.php. Так же «profile.php«содержит только« logged_only (); »и print_r (когда я удаляю перенаправление на login.php) из $ _SESSION, который показывает только« »Вы не можете получить доступ к этой странице«(как я отправляю сообщение через $ _SESSION)
Кто-нибудь, чтобы вести меня? Спасибо
Возможно, вам следует прочитать о session_start()
в PHP: Руководство по PHP
Короче говоря: session_start()
запускает новый сеанс или восстанавливает уже существующий сеанс с клиентом.
Поэтому после каждого перенаправления (также на ваш login.php) вам нужно позвонить session_start()
,
Там нет необходимости
if (session_status() == PHP_SESSION_NONE){
session_start();
}
Вы должны использовать только
session_start();
(В обоих случаях ваш functions.php и login.php) до доступ к $_SESSION
переменная.
functions.php
function logged_only(){
session_start();
if(!isset($_SESSION['auth'])){
$_SESSION['flash']['danger'] = "You can't enter this page - not logged in";
header('Location: login/login.php');
exit();
}
}
login.php
session_start();
// ... Rest of code
elseif(password_verify($_POST['password'], $user->password)){
$_SESSION['auth'] = $user;
$_SESSION['flash']['success'] = 'You're now connected';
header('Location: ../profile.php'); // user's homepage
exit();
Других решений пока нет …