Не логинит в систему (cookie) [дубликат]

265
28 августа 2017, 08:47

На данный вопрос уже ответили:

  • Cannot modify header information - headers already sent by 3 ответа

Вечер добрый. Есть код. Цель его авторизирует пользователя(login.php), а затем когда пользователь переходит на index.php(меню) должна быть надпись Logged In.
В чем проблема.Когда пользователь авторизируется(система говорит Logged In), но когда он переходит на index.php(в меню), то система говорит 'Not Logged In'. Я так подозреваю проблема в cookie. т.к браузер их не показывает. В чем проблема?! ЗАРАНЕЕ СПАСИБО ЗА ПОМОЩЬ!!!

P.S. Использовал разные хостинги и в том числе локальный, но на некоторых хостингах выдает ошибку:

Warning: Cannot modify header information - headers already sent by (output started at D:\OpenServer\domains\Social-Network-Part6\login.php:11) in D:\OpenServer\domains\Social-Network-Part6\login.php on line 17

Warning: Cannot modify header information - headers already sent by (output started at D:\OpenServer\domains\Social-Network-Part6\login.php:11) in D:\OpenServer\domains\Social-Network-Part6\login.php on line 18

<?php 
include('classes/DB.php'); 
 
if (isset($_POST['login'])) { 
        $username = $_POST['username']; 
        $password = $_POST['password']; 
 
        if (DB::query('SELECT username FROM users WHERE username=:username', array(':username'=>$username))) { 
 
                if (password_verify($password, DB::query('SELECT password FROM users WHERE username=:username', array(':username'=>$username))[0]['password'])) { 
                        echo 'Logged in!'; 
                        $cstrong = True; 
                        $token = bin2hex(openssl_random_pseudo_bytes(64, $cstrong)); 
                        $user_id = DB::query('SELECT id FROM users WHERE username=:username', array(':username'=>$username))[0]['id']; 
                        DB::query('INSERT INTO login_tokens VALUES (\'\', :token, :user_id)', array(':token'=>sha1($token), ':user_id'=>$user_id)); 
 
                        setcookie("MYMYSNID", $token, time() + 60 * 60 * 24 * 7, '/', NULL, NULL, TRUE); 
                        setcookie("MYMYSNID_", '1', time() + 60 * 60 * 24 * 3, '/', NULL, NULL, TRUE); 
 
                } else { 
                        echo 'Incorrect Password!'; 
                } 
 
        } else { 
                echo 'User not registered!'; 
        } 
 
} 
 
?> 
<h1>Login to your account</h1> 
<form action="login.php" method="post"> 
<input type="text" name="username" value="" placeholder="Username ..."><p /> 
<input type="password" name="password" value="" placeholder="Password ..."><p /> 
<input type="submit" name="login" value="Login"> 
</form>

<?php 
include('./classes/DB.php'); 
 
function isLoggedIn() { 
 
        if (isset($_COOKIE['MYMYSNID'])) { 
                if (DB::query('SELECT user_id FROM login_tokens WHERE token=:token', array(':token'=>sha1($_COOKIE['MYMYSNID'])))) { 
                        $userid = DB::query('SELECT user_id FROM login_tokens WHERE token=:token', array(':token'=>sha1($_COOKIE['MYMYSNID'])))[0]['user_id']; 
 
                        if (isset($_COOKIE['MYMYSNID_'])) { 
                                return $userid; 
                        } else { 
                                $cstrong = True; 
                                $token = bin2hex(openssl_random_pseudo_bytes(64, $cstrong)); 
                                DB::query('INSERT INTO login_tokens VALUES (\'\', :token, :user_id)', array(':token'=>sha1($token), ':user_id'=>$userid)); 
                                DB::query('DELETE FROM login_tokens WHERE token=:token', array(':token'=>sha1($_COOKIE['MYMYSNID']))); 
 
                                setcookie("MYMYSNID", $token, time() + 60 * 60 * 24 * 7, '/', NULL, NULL, TRUE); 
                                setcookie("MYMYSNID_", '1', time() + 60 * 60 * 24 * 3, '/', NULL, NULL, TRUE); 
 
                                return $userid; 
                        } 
                } 
        } 
 
        return false; 
} 
 
if (isLoggedIn()) { 
        echo 'Logged In'; 
        echo isLoggedIn(); 
} else { 
        echo 'Not logged in'; 
} 
 
?>

Answer 1

Приведенные ошибки:

`Warning: Cannot modify header information - headers already sent by (output started at D:\OpenServer\domains\Social-Network-Part6\login.php:11) in D:\OpenServer\domains\Social-Network-Part6\login.php on line 17`
`Warning: Cannot modify header information - headers already sent by (output started at D:\OpenServer\domains\Social-Network-Part6\login.php:11) in D:\OpenServer\domains\Social-Network-Part6\login.php on line 18`

говорят тебе, что не надо отправлять заголовки после вывода контента.

Что это значит?

Это значит, что не надо выводить контент (в php echo, print, print_r и другие варианты вывода контента) перед функциями, которые устанавливают заголовки, а именно заголовки установки cookie, сессии, или любые другие заголовки с использованием функции header()

И вообще, при разработке на локальном хосте включай вывод ошибок php. Для этого в начале файла php добавь следующие строки

<?php
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
READ ALSO
Обработать массив для занесения в БД

Обработать массив для занесения в БД

Доброго времени суток, есть такой массив:

190
Отслеживание состояние процесса

Отслеживание состояние процесса

Добрый вечер - интересует такой вопросВозможно ли создать такую программу, которая будит проводить мониторинг другого процесса на пример...

226