Итак, у меня есть:Как правильно начать и уничтожить сеанс?
- index.php (логин и зарегистрировать форму, страница приветствия и т.д.)
- login.php (это просто Войти проверить PHP-файл, который выполняется, когда пользователь нажимает кнопку отправить на index.php),
- home.php (сайт, на котором пользователь перенаправляет после входа в систему правильно)
- logout.php (обратная сторона login.php, перенаправляет пользователя на index.php и уничтожает сеанс (I мысль ..)
Проблема в том, что я могу получить home.php, даже до того, как я вхожу в систему правильно, в любое время. Я положил start_session() на каждую страницу, для которой нужна переменная $ _SESSION, и поставил session_destroy() в logout.php.
Так вот коды PHP-файлов которых:
index.php
<body>
<?php
require_once('config.php');
if ($maintanance) {
echo "Az oldal karbantartás alatt van.";
}
else if ($db_conn_error) {
echo "Something went wrong according to database connection.";
}
else {
include('reg.php');
include('./templates/header.php');
?>
<section>
<form id="login_form" action="" method="POST">
<h2>Already a member? Sign in!</h2>
<p>Username: <input type="text" name="username"></p>
<p>Password: <input type="password" name="password"></p>
<input type="submit" name="login_submit" value="Sign In">
<?php include 'login.php'; ?>
</form>
<form id="reg_form" action="" method="POST" onsubmit="return validation();">
<h2>Sign up Now!</h2>
<p>Username: <input type="text" name="username" placeholder="min. 5 characters">
<span id="user_error"></span>
</p>
<p>Password: <input type="password" name="password" placeholder="min. 8 characters"></p>
<p>Password again: <input type="password" name="password_again"></p>
<p>E-mail: <input type="email" name="email" size="30"></p>
<p>Date of birthday:
<input type="number" name="bd_year" min="1950" max="2016">
<input type="number" name="bd_month" min="1" max="12">
<input type="number" name="bd_day" min="1" max="31">
</p>
<input type="submit" name="reg_submit" value="Sign Up">
</form>
</section>
</body>
</html>
<?php } ?>
login.php
<?php
include 'config.php';
if (isset($_POST["login_submit"]))
{
$username = $_POST["username"];
$password = $_POST["password"];
$query = "SELECT username, hashed_password FROM users WHERE username = '$username';";
$result = mysqli_query($conn, $query);
$row = mysqli_fetch_assoc($result);
$rows_num = mysqli_num_rows($result);
$password_match_error_message = false;
if ($rows_num == 0) {
echo "<p class='login_error_msg'>This user doesn't exist!</p>";
}
else {
$password_match = password_verify($password, $row['hashed_password']);
if (!$password_match) {
echo "<p class='login_error_msg'>Wrong password!</p>";
}
else {
session_start();
$_SESSION["user"] = $username;
header("Location: home.php");
}
}
}
?>
home.php
<?php
session_start();
if (isset($_SESSION["user"])) {
?>
<!DOCTYPE html>
<html>
<head>
<title>Spookie - Social Network</title>
<link rel="stylesheet" type="text/css" href="./css/style.css">
</head>
<body>
<?php
include './templates/header.php';
?>
<?php } else { echo "You are not logged in!"; } ?>
</body>
</html>
logout.php
<?php
session_unset($_SESSION["user"]);
session_destroy();
header("Location: index.php");
?>
Я знаю, это трудно понять, что происходит на самом деле с помощью кодов, на вход работает, но сессия не реально.
Проблема: я печатаю и home.php всегда доступен, несмотря на то, что я не вошел в систему. Logout.php не уничтожает сеанс или даже сеанс не может быть запущен.
Большое вам спасибо за помощь! :)
вашего home.php необходим этот фильтр внутри тела, а не перед DOCTYPE, если вы хотите, чтобы делать то, что он выглядит как вы хотите сделать (т. е. создать страницу, но с фильтрованным контентом). Тем не менее: что вы на самом деле возвращаете, когда вы посещаете эту страницу без сеанса, например, используя cURL или wget? Пожалуйста, обновите свой пост доказательством того, что что-то идет не так, чтобы мы могли знать, что вы знаете, прежде чем пытаться ответить на это. –