Мои сеансы работают на локальном хосте, но всякий раз, когда я пытаюсь использовать их на своем веб-сервере (000webhost) для моего проекта класса информатики, создается впечатление, что они не "сохраняются" на всех страницах.
Когда я делаю print_r($_SESSION);
на своей странице входа в систему (после нажатия кнопки входа в систему), массив возвращает полные значения, которые я ввел заранее.
Я также попытался выяснить, не связана ли это с моим подключением к базе данных, но когда я пытаюсь извлечь значения из таблиц, все работает просто отлично.
Когда я пытаюсь print_r($_SESSION);
на "home.php", массив становится пустым.
<?php
if($_POST) {
$connection = new PDO('mysql:host=localhost;dbname=noah', 'noah','password'); //changed the connection details because it's not usefull here
if(empty($_POST['username']) OR empty($_POST['password'])) {
?>
<div class="alert error">
<p>Please fill in all the fields</p>
</div>
<script>
$(".alert").fadeIn("500");
</script>
<?php
} else {
$username = $_POST['username'];
$password = $_POST['password'];
$password = hash('sha512', $password);
$verifyExistingUser = $connection->query("SELECT name FROM user WHERE username = '$username' AND password = '$password'");
foreach ($verifyExistingUser as $key => $value) {
retrievedUser = $value['name'];
}
if (empty($retrievedUser)) {
?>
<div class="alert error">
<p>Incorrect username / password</p>
</div>
<script>
$(".alert").fadeIn("500");
</script>
<?php
} else {
try {
session_start();
$_SESSION["username"] = $username;
$_SESSION["name"] = $retrievedUser;
$_SESSION["password"] = $password;
print_r($_SESSION);
echo "retrieved name from database: " . $retrievedUser;
echo "<script type='text/javascript'>window.location.href = 'home.php';</script>";
} catch(PDOException $e) {
echo "error: " . $e->getMessage();
}
}
}
}
?>
Редактировать 1
Полный код после некоторых исправлений (вывод Cannot modify header information - headers already sent by (output started at /storage/ssd2/777/7604777/public_html/process/loginProcess.php:2) in /storage/ssd2/777/7604777/public_html/process/loginProcess.php on line 70
).
Я понимаю, что это является HTML-кодом в PHP, но я хотел бы включить в него некоторые jQuery и CSS, как мне это исправить?
<?php session_start(); ?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="assets/css/php.css">
</head>
<body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script>
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
if($_POST) {
$connection = new PDO('mysql:host=localhost;dbname=noah', 'noah','password');
if(empty($_POST['username']) OR empty($_POST['password'])) {
?>
<div class="alert error">
<p>Please fill in all the fields</p>
</div>
<script>
$(".alert").fadeIn("500");
</script>
<?php
} else {
$username = $_POST['username'];
$password = $_POST['password'];
$password = hash('sha512', $password);
$verifyExistingUser = $connection->query("SELECT name FROM user WHERE username = '$username' AND password = '$password'");
foreach ($verifyExistingUser as $key => $value) {
$retrievedUser = $value['name'];
}
if (empty($retrievedUser)) {
?>
<div class="alert error">
<p>Incorrect username / password</p>
</div>
<script>
$(".alert").fadeIn("500");
</script>
<?php
} else {
try {
$_SESSION["username"] = $username;
$_SESSION["name"] = $retrievedUser;
$_SESSION["password"] = $password;
print_r($_SESSION); //debugging
echo "retrieved name from database: " . $retrievedUser; //debugging
header('location: ' . 'home.php');
} catch(PDOException $e) {
echo "error: " . $e->getMessage();
}
}
}
}
?>
</body>
</html>