-
login
Buonasera a tutti,
ho scaricato uno script per eseguire un login, ma non funziona:
ho dato un occhiata ma non riesco a trovare l'errore;
lo posto qui nella speranza che qualcuno mi aiuti,
è composto da 4 file;
vorrei riuscire a capire come funziona un sistema di login,
se questo non andasse bene, magari qualcuno di voi può segnalarmene uno.
ringrazio in anticipo
buona serata a tuttiindex.php
[PHP]
<?php include('config.php'); ?>
<!DOCTYPE html>
<html>
<head><title>login</title>
</head>
<body><form id="login" action="verifica.php" method="post"> <fieldset id="inputs"> <input id="username" name="username" type="text" placeholder="Username" autofocus required> <input id="password" name="password" type="password" placeholder="Password" required> </fieldset> <fieldset id="actions"> <input type="submit" id="submit" value="Collegati"> </fieldset> </form>
</body>
</html>
[/PHP]verifica.php
[PHP]
<?php
session_start(); //inizio la sessione
//includo i file necessari a collegarmi al db con relativo script di accesso
include("config.php");//mi collego
mysql_select_db("$db_name",$connessione);//variabili POST con anti sql Injection
$username=mysql_real_escape_string($_POST['username']); //faccio l'escape dei caratteri dannosi
$password=mysql_real_escape_string(sha1($_POST['password'])); //sha1 cifra la password anche qui in questo modo corrisponde con quella del db$query = "SELECT * FROM login WHERE username = '$username' AND password = '$password' ";
$ris = mysql_query($query, $connessione) or die (mysql_error());
$riga=mysql_fetch_array($ris);/*Prelevo l'identificativo dell'utente */
$cod=$riga['username'];/* Effettuo il controllo */
if ($cod == NULL) $trovato = 0 ;
else $trovato = 1;/* Username e password corrette */
if($trovato === 1) {/Registro la sessione/
session_register('autorizzato');$_SESSION["autorizzato"] = 1;
/Registro il codice dell'utente/
$_SESSION['cod'] = $cod;/Redirect alla pagina riservata/
echo '<script language=javascript>document.location.href="privato.php"</script>';} else {
/Username e password errati, redirect alla pagina di login/
echo '<script language=javascript>document.location.href="index.php"</script>';}
?>
[/PHP]privato.php
[PHP]
<?php
session_start();
//se non c'è la sessione registrata
if (!session_is_registered('autorizzato')) {
echo "<h1>Area riservata, accesso negato.</h1>";
echo "Per effettuare il login clicca <a href='index.php'><font color='blue'>qui</font></a>";
die;
}//Altrimenti Prelevo il codice identificatico dell'utente loggato
session_start();
$cod = $_SESSION['cod']; //id cod recuperato nel file di verifica
?>
[/PHP]config.php
[PHP]
<?php//generali
$sito_internet = "Test";
$data =(date("d-m-y"));
$vers = "2.0";
//URL PER HTACCESS
//connessione DB
$host = "localhost";
$db_user = "root";
$db_psw = "hal9000";
$db_name = "studio";
?>
[/PHP]
-
Che problemi ti da?
-
Ciao pietro,
Non mi da errori, da schermata bianca;
Grazie per la risposta!
Ciao!
-
La mancanza di errori probabilmente è perchè il server è settato per non mostrarli.
A occhio e croce il primo motivo per cui non ti funziona è perchè manca la funzione mysql_connect() per il collegamento al DB che, di conseguenza, rende inesistente la variabile $connessione.Ciao,
-
ciao oslino,
grazie 1000, ho risolto in altro modo:
index.php
[PHP]
<?php include ("../config.php"); ?>
<html>
<head>
</head>
<body><?php
if(isset($_GET['accesso']))
if($_GET['accesso']=="negato")
print "<p id='accesso_negato_login'><i class='fa fa-ban'></i> Accesso negato, reinserire le credenziali</p>";
?><div id="login">
<div>
<i class="fa fa-lock"></i>
<h1>Area Riservata</h1>
</div>
<form action="verifica.php">
<p><i class="fa fa-user"></i> Username</p>
<input type="text" name="username" placeholder="Inserici lo Username">
<p><i class="fa fa-key"></i> Password</p>
<input type="password" name="password" placeholder="Inserisci la Password">
<input type="submit" value="Accedi" id="conferma">
</form></div>
</body>
</html>
[/PHP]verifica.php
[PHP]
<?php session_start(); ?>
<?php include("../config.php"); ?><?php
$sql = "SELECT * FROM generali";
$ret = mysqli_query( $db, $sql );
while ($row = mysqli_fetch_assoc($ret)){$username_ok = $row['username']; $password_ok = $row['password']; }
?>
<?php
$username = $_GET['username'];
$password = sha1($_GET['password']);
if( $username==$username_ok AND $password==$password_ok )
{
$_SESSION['utente']= $password;
header('location:../home/home.php');
}
else{header('location:index.php?accesso=negato');}
?>
[/PHP]dopodichè ho un header comune per tutte le pagine della mia area riservata e in testa al documento ho incollato:
[PHP]
<?php
session_start();
if(!isset($_SESSION['utente'])){
header('location:../login/index.php');
}
?>
[/PHP]grazie 1000 Oslino per i consigli, sto imparando parecchie cose grazie a questo forum;
sto facendo un piccolo CMS a scopo didattico; quando lo finisco magari ve lo faccio vedere così mi date consigli sul codice!grazie ancora
buonanotte
-
A parte la struttura un po' "contorta" del codice, sei sicuro che funzioni??? Non l'ho provato ma a spanna credo che funzioni solo se nel DB hai una singola riga con un solo utente.
Il tuo "while" imposta le variabili "xxxx_ok" sempre all'ultimo valore dell'array $row.
Prova a mettere 2 utenti nel DB e a fare il login con il primo. Secondo me non dovrebbe funzionarti.Ciao.
-
ciao oslino,
grazie per la risposta, in effetti ho un solo utente; appena ho tempo faccio un po' di test inserendone 2 o 3.
ma cosa intendi per "struttura un po' contorta"? se mi dai qualche suggerimento aggiusto il codice.
grazie ancora buona giornata
-
Io lo farei così
[PHP]<?php require_once("../config.php"); ?>
<html>
<head>
</head>
<body><?php
if(isset($_GET['accesso']) AND $_GET['accesso']=="negato")
print "<p id='accesso_negato_login'><i class='fa fa-ban'></i>Accesso negato, reinserire le credenziali</p>";
?><div id="login">
<div>
<i class="fa fa-lock"></i>
<h1>Area Riservata</h1>
</div>
<form action="verifica.php" method="POST">
<p><i class="fa fa-user"></i> Username</p>
<input type="text" name="username" placeholder="Inserici lo Username">
<p><i class="fa fa-key"></i> Password</p>
<input type="password" name="password" placeholder="Inserisci la Password">
<input type="submit" value="Accedi" id="conferma">
</form></div>
</body>
</html>
[/PHP]verifica.php
[PHP] <?php session_start();
require_once("../config.php");$username = mysqli_real_escape_string($db, $_POST['username']);
$password = sha1($_POST['password']);
$sql = "SELECT * FROM generali WHERE username='$username' AND password='$password'";
$ret = mysqli_query( $db, $sql );
if(mysqli_num_rows($ret) == 1){
$_SESSION['utente']= 'autorizzato';
header('location:../home/home.php');
}else{
header('location:index.php?accesso=negato');
}
?>
[/PHP]header
[PHP] <?php
session_start();
if(isset($_SESSION['utente']) AND $_SESSION['utente'] == 'autorizzato'){
header('location:../login/index.php');
}
?>
[/PHP]
Ti avrei tolto anche tutti i tag <i> che essendo vuoti non hanno motivo di esistere, ma immagino che ti servano successivamente.- I valori delle credenziali è sempre meglio passarle tramite POST altrimenti sarebbero visibili a tutti nella URL;
- E' bene usare require_once() anzichè include() per file che sono indispensabili al corretto funzionamento del codice (senza config.php il collegamento al DB non funzionerebbe, quindi è essenziale);
- Controllare sempre tutti gli input dell'utente. mysqli_real_escape_string è solo il minimo dei controlli (contro SQL Injection), sarebbe bene valutare di usare anche strip_tags(), htmlentities(), htmlspecialchars() (contro attacchi XSS) e strlen() (contro attacchi buffer overflow)
Ciao
-
Oslino grazie mille degli ottimi consigli,
sono un principiante alle prime armi, per cui il codice che scrivo non penso sia il massimo però funziona
seguirò sicuramente i tuoi consigli.
grazie mille davvero