Логин не перенаправляет, header('Location')
я Закончил делать сайт, который позволяет CMS, чтобы наш клиент сможет войти и изменить контент на свой вкус. На localhost и на тестовом сервере, который у нас работает очень хорошо, но сервер назначения не могу выйти со страницы входа после заполнения правильные сведения.
Существуют 2 возможные исходы submit:
- остаться на страницу формы
- и если все правильно он делает
redirect
для меню.
, Но не делает redirect
и также не появляется никаких сообщений проверки. Я пошел в консоль браузера, и единственное различие, которое я видел между серверы в заголовке ответа, в этом - connection: close
и в другие (где работает правильно) connection: Keep-Alive
. Будет это?
googled много, и я не могу найти, нет четкого ответа, помогите мне решить эту проблему.
Уже пробовал, в том числе реализации header("Connection: Keep-Alive");
в коде, но проблема остается, несмотря на то, что в заголовке ответа, теперь будьте connection: Keep-Alive, close
. Я также использовал var_dump
localhost отображается array(1) { ["logged_in"]=> bool(true) }
. В server конце появляется array(0) { }
сессии не запускается. Я не понимаю, почему.
<?php
session_start();
var_dump($_SESSION);
header("Connection: Keep-Alive");
header('Content-type: text/html; charset=UTF-8');
include_once('../includes/connection.php');
if(isset($_SESSION['logged_in'])) { ?>
<html>
<head>
<meta charset="UTF-8" />
<title>AdminPT</title>
<link rel ="stylesheet" href="../assets/style.css"/>
</head>
<body>
<div class="container">
CMS - PT
<br>
<ol>
<li><a href ="add.php">Adicionar Artigo</a></li>
<li><a href ="delete.php">Eliminar Artigo</a></li>
<li><a href ="logout.php">Sair</a></li>
</ol>
</div>
</body>
</html>
<?php
}
else {
//display login
if(isset($_POST['username'], $_POST['password'])) {
$username = $_POST['username'];
$password = crypt(sha1(md5($_POST['password'])), 'st');
if (empty($username) || empty($password)) {
$error = "Todos os campos têm de ser preenchidos!";
}
else {
$query = $pdo->prepare("SELECT * FROM users WHERE user_name = ? AND user_password = ?");
$query->bindValue(1, $username);
$query->bindValue(2, $password);
$query->execute();
$num = $query->rowCount();
if($num == 1) {
$_SESSION['logged_in'] = true;
header('Location: index.php');
exit();
}
else {
$error = "Detalhes incorretos!";
}
}
}
?>
<html>
<head>
<title>AdminPT</title>
<meta charset="UTF-8">
<link rel ="stylesheet" href="../assets/style.css"/>
</head>
<body>
<div class="container">
CMS - PT
<br><br>
<?php
if (isset($error)) { ?>
<small style="color:#aa0000"><?php echo $error; ?></small>
<?php } ?>
<br><br>
<form action="index.php" method="post">
<input type ="text" name="username" placeholder="Username"/>
<input type="password" name="password" placeholder="Password"/>
<input type="submit" value="Login"/>
</form>
</div>
</body>
</html>
<?php
}
?>
3 answers
1 - Прежде всего, включите все сообщения об ошибках. Так, вероятно, станет явным то, что происходит не так и на удаленный сервер.
2 - Попробуйте переместить проверок в начало кода. Многие серверы не принимают инструкций от типа header:location
"в середине" кода, и да, только перед <html>
3 - Другая возможность иметь какой-то модуль отключен на удаленном сервере, а затем проверить через phpinfo()
различия между локальным сервером и удаленный.
Я Считаю, что только действие 2 устраните все, но все же я оставляю здесь и другие предложения. :)
У меня так же и я сделал следующее:
На место:
header ("location :index.php")
Сделал так: echo "<a href='index.php'> voltar a página inicial</a>";
, То будет печатать на экране, вернуться к главной странице, просто нажмите и делает возврат.
header("Location: " . $endereco);
, Можно всегда должен положить:
exit();
Если не решать, это может быть, что, поместив это в начале вашего файла:
ob_start();
И в конце файла:
ob_end_flush();