Bonjour,
je refais mon site web (à la main, sans cms cette fois ci) afin de progresser encore dans php.
Après avoir lu différents articles et posts (par exemple sur le vol de session), et vu différentes sources, je me suis crée ce petit script :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
class auth {
	var $connect;
 
	function __construct() {
		$db=DB_NAME;
 	 	$host=DB_HOST;
 	 	$passwd=DB_PASSWD;
 	 	$user=DB_USER;
 	 	$this->connect=new mysqli($host,$user,$passwd,$db);
 	 	if (mysqli_connect_errno()) {
 	 		throw new Exception ('Erreur : ne peut se connecter à  la base de donnée. Merci de réessayer plus tard.');
 	 	}
	}
 
	function ProtectVar($chaine){
		$chaine=$this->connect->real_escape_string(trim($chaine));
		return $chaine;
	}
	/*
	 * fonction qui vérifie le pseudo et le mot de passe entré
	 * s'ils correspondent bien
	 * @param string $pseudo
	 * @param string $passwd
	 */
	function Login($pseudo,$passwd) {
		if (empty($pseudo) || empty($passwd)){
			throw new Exception('Les champs pseudo ou password sont vides.');
		}
		$pseudo=$this->ProtectVar($pseudo);
		$passwd=$this->ProtectVar($passwd);
		$passwd=sha1('bast'.$passwd);
		$query="select * from membres where pseudo='$pseudo' and passwd='$passwd'";	
		$result=$this->connect->query($query);
		if (!$result) {
			throw new Exception('L\'identification a échoué.');
		}	
		//on vérifie que le compte soit activé
		if ($result->num_rows=='1'){
			$row=$result->fetch_row();
			if ($row['1']=='0') {
				throw new Exception('Votre compte n\'est pas encore activé.');
			} 
		} else {
			throw new Exception('L\'identification a échoué.');
		}
		session_start();
		if ($_SESSION['pseudo']) {
			unset ($_SESSION['pseudo']);
			session_destroy();
		}
		session_regenerate_id(true);
		$_SESSION['pseudo']=$pseudo;
		$_SESSION['niveau']=$row['6'];
		$_SESSION['dateacces']=time();
	}
 
	/*
	 * fonction à mettre en tete de chaque page
	 * elle vérifie qu'un utilisateur est connecté
	 */
	function EstConnecte() {
		session_start();
		regenerate_id(true);
		if (isset($_SESSION['pseudo']) && isset($_SESSION['niveau']) && isset($_SESSION['dateacces']) && $_SESSION['dateacces']+600<time()) {
                       $_SESSION['dateacces']=time();
		       return true;
		} else {
			return false;
		}
	}
 
}
la fonction login permet de valider lma connexion d'un nouvel utilisateur
la fonction estconnecte permet de savoir si quelqu'un est connecté ?

Puis-je avoir votre avis ?
Est ce suffisant niveau sécurité ?

J'avais pensé récupérer le niveau du membre à chaque fois par une connexion à la base. Mais ça n'apporte rien en sécurité car si quelqu'un vole $_SESSION['pseudo'] il obtiendra de toute façon le niveau stocké dans la base.

Dois-je aussi stocker la date d'accès et par exemple un ticket (nb aléatoire dans la base + dans un cookie) et faire une vérif à chaque chargement de pages ?

Je vous remercie