На данный вопрос уже ответили:
Вечер добрый. Есть код. Цель его авторизирует пользователя(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';
}
?>
Приведенные ошибки:
`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);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Добрый вечер - интересует такой вопросВозможно ли создать такую программу, которая будит проводить мониторинг другого процесса на пример...