Comment créer un très simple nom d'utilisateur - mot de passe de connexion en PHP?
index.php
<?php
if( $_SESSION['auth'] != 1 ) {
require( 'login.php' );
}
else {
echo "hello";
}
?>
login.php
<?php
$name = $_POST['name'];
$pass = $_POST['pass'];
if( isset($name) || isset($pass) )
{
if( empty($name) ) {
die ("ERROR: Please enter username!");
}
if( empty($pass) ) {
die ("ERROR: Please enter password!");
}
if( $name == "<some name>" && $pass == "<some password>" )
{
//Authentication successful - Set session
session_start();
$_SESSION['auth'] = 1;
setcookie("username", $_POST['name'], time()+(84600*30));
echo "Access granted!";
}
else {
echo "ERROR: Incorrect username or password!";
}
}
//If no submission, display login form
else {
?>
<html>
<head></head>
<body>
<center>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
Username: <input type="text" name="name" value="<?php echo $_COOKIE['username']; ?>">
<p />
Password: <input type="password" name="pass">
<p />
<input type="submit" name="submit" value="Log In">
</center>
</body>
</html>
<?php
}
?>
Donc, comme je suis encore à apprendre le PHP, il y a quelques choses que je suis à essayer de comprendre maintenant:
- Comment puis-je obtenir si je peux recharger index.php et il affiche "bonjour"?
- Comment puis-je obtenir login.php pour charger automatiquement index.php sur une authentification réussie, donc je peux le faire pour que "bonjour"?
- Plus tard, à l'aide d'un cookie pour stocker l'utilisateur a soumis les données de connexion (donc ils n'ont pas à remplir le formulaire afin de leur redonner de la session) ont des problèmes potentiels?
Aide appréciée.
Vous devez vous connecter pour publier un commentaire.
1, Vous êtes absent session_start() dans index.php. Ajouter et vous devriez être en mesure de voir 'Bonjour le monde'
2, Remplacer votre ligne avec "Accès accordé!" avec une redirection:
3, Vous pouvez certainement stocker des informations d'identification dans un cookie, mais vous devriez toujours hachage sel et le mot de passe. Ici est un bon article à propos de hachage de mot de passe.
Meilleure façon de faire les choses:
De vérifier la variable de session dans le index.php et rediriger si elle n'est pas définie. Quelque chose comme ceci
Dans le login.php après une authentification réussie, rediriger vers index.php et faire l'écho de là.
session_start() avant tout le contenu est repris à l'navigateur.
Vous devez:
toujours essayer d'appeler
session_start()
dès que possible - "utiliser des cookies de sessions,session_start()
doit être appelée avant outputing rien pour le navigateur".vérifier si
$_POST['name']
isset avant de faire$name = $_POST['name'];
. Vous pouvez le faire:stocker les
username
directement dans$_SESSION
de sorte que le cookie ne contient quePHPSESSID
et pas de données qui pourrait être remplacée /maltraitées par les utilisateurs finaux:essayer de rediriger l'utilisateur vers
index.php
pour voir le résultat immédiat de l'évolution de la session:Donc, c'est comment il pourrait ressembler à:
L'utiliser pour rediriger vers index.php (j'espère que ça répond à votre #1 et #2)
Vous êtes en utilisant des cookies pour stocker le nom d'utilisateur directement. Ce n'est pas une bonne option. Si un utilisateur modifie les cookies, de lire quelques-uns autre nom d'utilisateur? Au lieu d'utiliser
$_SESSION['..']
Comme ceci:
et puis, plus tard,
Supprimer la
else
, de sorte qu'il sera toujours afficher le texte "bonjour":Remplacer
echo "Access granted!";
avecheader('Location:index.php');
Aussi longtemps que sont l'utilisation de ce comme un moyen de remplir automatiquement le nom d'utilisateur uniquement. et de demander aux utilisateurs d'entrer leur mot de passe à chaque fois. sinon, un utilisateur peut définir son nom d'utilisateur cookie "admin", ou quelque autre utilisateur.
personne n'est à mentionner que vous devriez vérifier que la session est en fait un valide... si vous venez de vérifier si elle est définie, vous pouvez plus susceptibles de faux et d'obtenir à travers.
aussi de hachage des informations d'identification dans le "cookie" je voudrais crypter premier côté serveur, puis de hachage elle. juste au cas où quelque part dans l'avenir, quelqu'un brise le type de hachage. sha3-256 est votre meilleur choix ici car il n'est pas connu pour être brisées et doit résister à beaucoup de puissance de calcul augmente dans le futur.
Ce que je fais habituellement est de crypter le mot de passe d'utilisateur et le mot de passe utilisateur lui-même en tant que clé, de cette façon, si vous aussi stocker leurs informations d'identification dans ce fasion dans votre propre base de données, il n'existe aucun moyen, même pour le mainteneur de site de le décrypter et de voler les mots de passe. et de toute db dumping skiddie aura seulement quelques méta-données. (vous devez également crypter les noms d'utilisateur...)
Il semble un peu conveluted d'être un simple login et mot de passe pour les utilisateurs, mais vraiment aussi simple que possible devraient considérer la sécurité de vos utilisateurs, même si ce n'est pas un site public...
Donc n'oubliez pas:
demander à un ami de le savoir pour tester votre installation au meilleur de leur capacité, pour une caisse de bière ^^ et avoir du plaisir avec lui et d'apprendre un tas de choses au sujet de votre code 😀