Salve a tutti. Sto rifacendo il sito della mia associazione e, lo ammetto, sono un po' arrugginito con i linguaggi di programmazione.
Nonostante tutto l'ho portato a termine in locale, utilizzando XAMPP e gira tutto al meglio.
Portandolo on-line, per�, � venuto fuori un problema per quanto concerne la pagina di login (che serve esclusivamente per l'amministrazione e aggiornamento del sito, quindi con accessi molto limitati): pare che impostando PHP del server all'ultima versione disponibile, la 8.3, le sessioni non vengano salvate correttamente e non capisco il motivo.
Ecco le pagine incriminate:
LOGIN.PHP (semplice pagina di login)
codice HTML:
<html>
<head>
<title>Amministrazione</title>
<link rel="icon" href="../images/logo.ico">
<!-- for-mobile-apps -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="css/style.css" rel="stylesheet" type="text/css" media="all" />
</head>
<body>
<div id="content" class="content">
<div id="top" class="top">
<img src="../images/scritta.png" alt="logo"/>
</div>
<div id="center" class="center">
<form method="post" action="administration/session.php">
<h1>Accedi al Pannello di Gestione</h1>
<input type="text" id="username" placeholder="Username" name="username"><br/> <input type="password" id="password" placeholder="Password" name="password"><br/> <button type="submit" name="login">Accedi</button>
</form>
</div>
</div>
</body>
</html>
SESSION.php (pagina che controlla i dati inviati e si comporta di conseguenza):
Codice PHP:
<?php
session_start();
require_once('../db/dbconn.php');
function logout(){
$_SESSION = [];
$params = session_get_cookie_params();
setcookie('PHPSESSID', '', time() - 360000, $params['path'], $params['domain'], $params['secure'],$params['httponly']);
session_destroy();
header('Location: ../login.php');
}
if (isset($_SESSION['session_id'])) {
header('Location: main.php'); exit;
}
if (isset($_POST['login'])) {
$username = $_POST['username'] ?? '';
$password = $_POST['password'] ?? '';
if (empty($username) || empty($password)) {
$msg = 'Inserisci username e password %s';
} else {
$query = "SELECT username, password FROM utenti WHERE username = :username ";
$check = $pdo->prepare($query);
$check->bindParam(':username', $username, PDO::PARAM_STR);
$check->execute();
$user = $check->fetch(PDO::FETCH_ASSOC);
if (!$user || password_verify($password, $user['password']) === false) {
$msg = 'Credenziali utente errate %s';
} else {
session_regenerate_id();
$_SESSION['id'] = session_id();
$_SESSION['user'] = $user['username'];
header('Location: main.php');
exit;
}
}
printf($msg, '<a href="../login.php">torna indietro</a>');
}
MAIN.php (pagina a cui si dovrebbe giungere inserendo le giuste credenziali):
Codice PHP:
<html>
<head>
<title>Amministrazione</title>
<link rel="icon" href="../../images/logo.ico">
<!-- for-mobile-apps -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="../css/style.css" rel="stylesheet" type="text/css" media="all" />
</head>
<body>
<?php
include 'session.php';
if (ISSET($_POST['logout'])){
logout();
}
if (isset($_SESSION['id'])) {
$user = htmlspecialchars($_SESSION['user'], ENT_QUOTES, 'UTF-8');
$id = htmlspecialchars($_SESSION['id']);
?>
<div id="content" class="content">
<div id="bigTitle" class="bigTitle">
<img src="../../images/logosha.png"/>
PANNELLO DI CONTROLLO DEL SITO WEB
<img src="../../images/logosha.png"/>
</div>
<div id="soci" class="soci">
<div id="title" class="title">
<img src="../../images/pawn.png" alt="soci icon" />SOCI<img src="../../images/pawn.png" alt="soci icon" />
</div>
<div id="buttons" class="buttons">
<div id="button" class="button">
<a href="soci/socilist.php" ><div id="btnctn" class="btnctn"> Gestione Soci </div></a> </div>
</div>
</div>
<div id="giochi" class="giochi">
<div id="title" class="title">
<img src="../../images/d20.png" alt="giochi icon" /> GIOCHI <img src="../../images/d20.png" alt="soci icon" />
</div>
<div id="buttons" class="buttons">
<div id="button" class="button">
<a href="giochi/gamelist.php" ><div id="btnctn" class="btnctn"> Gestione Giochi </div></a> </div>
</div>
</div>
<div id="gallery" class="gallery">
<div id="title" class="title">
<img src="../../images/photo.png" alt="gallery icon" />GALLERY <img src="../../images/photo.png" alt="gallery icon" />
</div>
<div id="buttons" class="buttons">
<div id="button" class="button">
<div id="btnctn" class="btnctn">
<a href="gallery/gallist.php" > Gestione Gallery </a>
</div>
</div>
</div>
</div>
<div id="copertina" class="copertina">
<div id="title" class="title">
<img src="../../images/id.png" alt="copertina icon" /> COPERTINA <img src="../../images/id.png" alt="copertina icon" />
</div>
<div id="buttons" class="buttons">
<div id="button" class="button">
<div id="btnctn" class="btnctn">
<a href="copertina/coplist.php" > Gestione Copertina </a>
</div>
</div>
</div>
</div>
<form name="logout" method="POST" action="main.php">
<input type="submit" name="logout" class="submitmain" value="LOG OUT">
</form>
</div>
<?php
} else {
printf(" Effettua il %s per accedere all'area riservata", '<a href="../login.php">login</a>');
}
?>
</body>
</html>
Impostando il server su php 8.3 mi sembra di capire che ci siano problemi con session_regenerate_id() in session.php e comunque anche impostando una sessione tipo $_SESSION['pippo'] avviene il redirect a main.php che, per� non vede la sessione.
Impostando tutto a PHP 7.1 il login funziona, ma le pagine successive no, probabilmente perch� in versioni php superiori.
Ribadisco, su XAMPP gira tutto come dovrebbe 
Mi sapreste aiutare a risolvere questo problema?
Grazie mille!