2016-05-02 5 views
1

Я довольно noob на 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)

Кто-нибудь, чтобы вести меня? Благодаря

+0

http://php.net/manual/en/function.error-reporting.php –

+0

Место 'session_start(); 'в верхней части любого скрипта, вне любых условий, которые являются или имеют возможность использования сеансов. – Marcus

ответ

1

Вы, возможно, должны прочитать о session_start() в PHP: PHP Manual

В коротких словах: 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(); 
+0

Ооооооочень спасибо, сейчас очень ясно! Теперь он работает отлично, просто добавив немного session_start(); внутри моего login.php! Большое спасибо ! – whitelamp

+0

Приятно слышать это :) Тогда вы должны принять этот ответ, чтобы другие могли его увидеть – Kryptur

 Смежные вопросы

  • Нет связанных вопросов^_^