La cloche.

Il y a ceux qui ont lu cette nouvelle devant vous.
Abonnez-vous pour recevoir des articles frais.
E-mail
Nom
Nom de famille
Comment voulez-vous lire la cloche
Sans spam

Technologie de session B. Php. sont façon simple Stockage des informations pour un utilisateur d'un seul utilisateur. Par exemple: les marchandises ajoutées au panier, les paramètres de notification, etc. Lorsque le site est demandé pour la première fois au serveur, le navigateur est enregistré dans les cookies uniques. identifiant de session Utilisateur. Ensuite, l'identifiant ou le tas de l'identifiant avec l'adresse IP identifie l'utilisateur. Ceci peut être utilisé pour enregistrer le statut entre les demandes de pages. Les identificateurs de sessions sont généralement envoyés au navigateur via Session Cookie et sont utilisés pour obtenir des données de session disponibles.

Les sessions sont utilisées technologie simple: PHP recevra les données de la session existante à l'aide de l'identifiant transmis (généralement de la session. biscuit), Ou, si rien n'est passé, une nouvelle session sera créée. PHP remplira la variable superglobale $ _session par des informations de session après l'exécution de la session. Lorsque PHP se termine, il séria automatiquement le contenu de la variable superglobale $ _session et envoie pour enregistrer à l'aide du gestionnaire de session pour enregistrer la session.

Par défaut, PHP utilise un gestionnaire interne des dossiers. Pour enregistrer des sessions, qui est installée dans la variable Session.Save_handler Ini. Ce gestionnaire enregistre des données sur le serveur dans le répertoire spécifié dans la directive sur la configuration Session.Save_Path.

L'exemple le plus facile de l'utilisation de la session, par exemple, la sortie du nombre de contacts à la page pour chaque utilisateur:

Comment les sessions peuvent-elles être possibles?

Sur le site Web PHP dans les sections de description de la session, il existe une note (http://php.net/manual/ru/session.examples.basic.php):

Sessions utilisant des fichiers (par défaut dans Php.), Bloquez le fichier de session immédiatement lorsque la session ouvre la fonction session_start () ou indirectement lors de la spécification de session.Auto_Start. Après avoir bloqué, aucun autre script ne peut accéder au même fichier de session jusqu'à ce qu'il soit fermé ou lorsque le script est terminé ou lorsque la fonction Session_Write_Close () est appelée.

Très probablement, ce sera un problème pour les sites qui utilisent activement Ajax Et faire plusieurs demandes simultanées. Le moyen le plus simple de résoudre ce problème sera l'appel de la fonction session_write_close () immédiatement dès que toutes les modifications requises de la session sont effectuées, de préférence plus près du début du script. Vous pouvez également utiliser un autre mécanisme de session qui prend en charge un accès concurrentiel.

Récemment, le problème du blocage des sessions devient de plus en plus fréquent. Ceci est en partie dû à la complication des sites et à la nécessité de produire plus de calculs sur le serveur plus fort, ainsi que de la grande distribution Ajax. Malheureusement, la logique d'application n'est pas toujours, surtout si elle est compliquée, cela vous permet de limiter efficacement le temps de bloquer les processus concurrents. La situation est aggravée par le fait que 3-5 clients de ce type sont capables de marquer rapidement accroché et de ralenti en anticipation de processus de chute de PHP, ce qui entraîne le site. commencera à émettre Erreur 5xx .

L'exemple le plus facile des sessions de blocage:

// seulement pour un script ?>

Si vous ouvrez ce fichier d'abord dans le premier onglet, puis dans la seconde - le deuxième onglet attendra le premier à la première. C'est, en fait, le deuxième onglet attendra que le premier ne libère pas le fichier de session (qui occupe un cas particulier de 30 secondes). Ce problème bien décrit dans le blog de la société 1c-bitrix sur Habrahabr.

Quelles options pour résoudre ce problème existe?

Vous pouvez utiliser la base de données pour stocker des sessions Mysql ou alors PostgreSQL (ce qui n'est pas tout à fait juste, compte tenu des possibilités de la plupart des bases de données et de la vitesse de travail possible dans cette tâche), Memcached (Ne garantit pas le stockage de la session, il est possible de le supprimer) et Redisnous considérons stockage optimal. À la vitesse, il n'est pas inférieur à memcached, mais il peut garantir la sécurité des données.

Et l'avantage le plus important Redis - Lorsqu'il est stocké, des sessions ne sont pas bloquées.

Dans notre panneau de commande (), vous pouvez activer les sessions de stockage dans Redis pour tous les sites du compte. Pour ce faire, allez à la section " Des sites", puis célébrez une tique -" Stocker sessions de tous les sites de Redis".

Matériaux additionnels

Sections

Ssh.

Ftp.

des applications Web

  • Informations d'installation d'applications générales (environnement virtuel Docker)

Diagnostic des problèmes

Domaines

  • Annulation du nom de domaine dans la zone.ru / .rf pour laquelle Beget est un registraire
  • Transfert d'administration de noms de domaine DROITS.RU / .RF / .SU et zones internationales (changement de domaine administrateur)

.
Dans cet article, nous allons ajouter à notre inscription vérifiere.- posteradresses, connexion automatique et restauration mot de passe oublié . Avant de procéder à la leçon, assurez-vous d'avoir une fonction sur le serveur. poster ().

Commencez par ajouter des champs à la table « utilisateurs.» . Nous avons besoin d'un champ pour stocker une adresse e-mail, un champ pour l'état de l'utilisateur (0 - non activé, 1 - activé) et le champ avec la date d'enregistrement.





Puis doit être corrigé save_user.php.En ajoutant la vérification de l'exactitude de l'adresse e-mail et en envoyant une lettre pour confirmer l'enregistrement. La lettre contient un lien avec deux variables transmises par la méthode GET : Connectez-vous et généré, unique pour chaque utilisateur, code. Le code dont nous avons besoin pour que l'utilisateur ne puisse pas activer son compte sans lettre, et cela nous donnera confiance à ce que l'adresse postale introduite lui appartient vraiment. Ajoutez le code suivant après avoir extrait de données des variables globales:

Si (IMSET ($ _ POST ["EMAIL"])) ($ e-mail \u003d $ _Post ["Email"]; si ($ e-mail \u003d\u003d "") (Déset (e-mail $);)
Si (vide ($ login) ou vide ($ mot de passe) ou vide ($ code) ou vide ($ email))
// Ajouter une variable avece.- posteradresse
// Si l'utilisateur n'a pas saisi de connexion ou de mot de passe, nous donnons une erreur et arrêtons le script.
{
Quitter («Vous avez entré toutes les informations, revenez et remplissez tous les champs!»); // Démarrer l'exécution des scénarios
}
Si (! Preg_Match ("/ [Email protégé]+ \\ \\. (2.3) / i ", $ email)) // Vérifier les adresses e-mail expressions régulières Exactitude
(Sortie ("E-mail est incorrect!");)

La demande d'ajout d'un nouvel utilisateur doit être adressée et la date d'enregistrement. Si les données sont insérées avec succès dans la base de données et que l'utilisateur est enregistré, vous devez envoyer un message à l'adresse suivante:

// sinon, nous enregistrons les données
$ Résultat2 \u003d mysql_query ("Insert dans les utilisateurs (connexion, mot de passe, avatar, email, date) valeurs (" $ login "," $ mot de passe "," $ avatar "," $ email ", maintenant ())" ;
// Vérifiez s'il y a des erreurs
Si ($ résultat2 \u003d\u003d "vrai")
{
$ Résultat3 \u003d mysql_query ("Sélectionnez l'identifiant des utilisateurs où login \u003d" $ Connexion "", $ dB); // retirez l'ID utilisateur. Merci à lui que nous allons code unique Activation, car deux identifiants identiques ne peuvent pas être.
$ Myrow3 \u003d mysql_fetch_array ($ résultat3);
$ Activation \u003d md5 ($ myrow3 ["id"]). MD5 ($ Connexion); // le codeactivationcompte. Entrez via l'identifiant de la fonction MD5 et la connexion. Une telle combinaison de l'utilisateur est peu susceptible de pouvoir le rendre manuellement manuellement à travers la barre d'adresse.
Sujet \u003d "Confirmation de l'enregistrement"; //Objet du message
$ Message \u003d "Bonjour! Merci pour l'inscription sur CITNAME.RU \\ NVAS Connexion:". $ Connexion. "\\ N n
Suivez le lien pour activer votre compte: \\ NHTTP: //Localhost/test3/activation.php? Login \u003d ". $ Connexion." & Code \u003d ". $ Activation." \\ NC Respect, \\ n
Administration de Citename.ru "; // contenu posté
Mail ($ email, $ sujet, $ message, "Type de contenu: Texte / Avion; Charset \u003d Windows-1251 \\ R \\ N"); // Envoyer un message

Echo "Vous êtes envoyé à la lettre de messagerie avec une assistance pour confirmer l'enregistrement. Attention! Le lien est valable 1 heure. Page principale"; // Nous parlons de la lettre envoyée par l'utilisateur
}

Message envoyé! Maintenant, l'utilisateur l'ouvrira et accédera au lien indiqué sur la page qui vérifiera le code d'activation. S'assurer que le code est fidèle, nous confirmons l'enregistrement, modifiant la valeur du champ dans la base de données. activation. Avec "0" à "1".

Créer un fichier. activation.php.

Inclure ("bd.php"); // Déposerbd.. php. doit être dans le même dossier que tout le monde, si ce n'est pas le cas, changez simplement la voie
$ Résultat4 \u003d mysql_query ("Sélectionnez Avatar à partir des utilisateurs où activation \u003d" 0 "et UNIX_TMESTAMP () - UNIX_TIMESTAMP (date)\u003e 3600); // Supprimez les avatars de ces utilisateurs qui n'ont pas activé leur compte dans une heure. Par conséquent, ils doivent être retirés de la base, ainsi que les fichiers de leurs avatars
Si (mysql_num_rows ($ résultat4)\u003e 0) (
$ Myrow4 \u003d mysql_fetch_array ($ résultat4);
fais.
{
// retirez les avatars dans le cycle si elles ne sont pas standard
Si ($ myrow4 ["avatar"] \u003d\u003d "avatars / net-avatara.jpg") ($ a \u003d "ne rien faire";)
AUTRE (
Dispark ($ myrow4 ["Avatar"]); // Supprimer le fichier
}
}
Tandis que ($ myrow4 \u003d mysql_fetch_array ($ résultat4));
}
Mysql_query ("Supprimer des utilisateurs où activation \u003d" 0 "et UNIX_TMESTAMP () - UNIX_TIMESTAMP (date)\u003e 3600); // Supprimer les utilisateurs de la base
Si (Isset ($ _ obtenir ["code"])) ($ code \u003d $ _ obtenir ["code"];) //code de confirmation
AUTRE.
(Sortie ("Vous êtes allé à la page sans code de confirmation!"););) // si non spécifiécode., alors émettre une erreur
Si (Isset ($ _ obtenir ["login"])) ($ Connexion \u003d $ _ obtenir ["login"];) // Connexion pour activer
AUTRE.
(Quitter («Vous êtes allé à la page sans vous connecter!»);) // Si vous ne spécifiez pas le login, nous donnons une erreur
$ résultat \u003d mysql_query ("Sélectionnez l'identifiant des utilisateurs où login \u003d" $ Connexion "", $ dB); // retirez l'ID utilisateur avec ce login
$ Activation \u003d md5 ($ myrow [id "]). MD5 ($ Connexion); // Créer le même code de confirmation
Si ($ activation \u003d\u003d $ code) ( // comparer le résultant deuRL et code généré
Mysql_Query ("Update utilisateurs définit activation \u003d" 1 "où login \u003d" $ Connexion "", $ dB); // Si vous êtes égal, activez l'utilisateur
Echo "Votre e-mail est confirmé! Maintenant, vous pouvez aller sur le site sous votre identifiant! Page d'accueil";
}
Sinon (echo "erreur! Votre e-mail n'est pas confirmé! Accueil";
// si le résultant deuRL et le code généré n'est pas égal, alors nous donnons une erreur
}
?>

L'adresse e-mail est confirmée, nous savons maintenant que cette adresse appartient. cet utilisateurVous pouvez lui envoyer un mot de passe si l'utilisateur l'oubliera, ou d'autres notifications. Mais quelle est la différence entre les utilisateurs activés, de non-activé? Et ceux-ci et d'autres peuvent aller sur le site, nous devons donc limiter l'accès aux non-activés. Fichier ouvert testère.. php. Et ajoutez une autre condition dans la requête à la base de données:

$ Résultat \u003d mysql_query ("Sélectionnez * à partir des utilisateurs où login \u003d" $ Connexion "et mot de passe \u003d" $ mot de passe "et actif \u003d" 1 "", $ dB); // Supprimez toutes les données sur l'utilisateur de la connexion de la base de données.
// Nous avons terminé "Et.activation.\u003d "1", c'est-à-dire que l'utilisateur sera recherché uniquement parmi activé. Il est conseillé d'ajouter cette condition à d'autres contrôles similaires de données utilisateur.

Si l'utilisateur oubliera le mot de passe, alors pour un tel cas, vous devez retirer un lien vers page d'accueilPour lequel il peut le restaurer, vous pouvez immédiatement mettre une case à cocher pour la connexion automatique.

Entrée automatique.






S'inscrire


Mot de passe oublié?

Il y a un lien, mais il n'y a pas de fichier. Écrivons envoyer._ passe. php.. Dans ce cas, nous vous demanderons la connexion à l'utilisateur et l'adresse électronique. Si l'e-mail entré et la connexion est dans la base de données, nous l'enverrons. nouveau mot de passeSi l'utilisateur a oublié l'ancien, car nous étions convaincus lorsque vous enregistrez que l'adresse électronique est valide.

Si (Isset ($ _ POST ["LOGIN"]))) ($ Connexion \u003d $ _Post ["Connexion"]; si ($ LOGIN \u003d\u003d "") (DÉCIS ($ Login);)) // Nous entrons dans l'utilisateur entré par l'utilisateur dans la variable $ Connexion, si elle est vide, nous détruisons la variable
Si (IMSET ($ _ POST ["EMAIL"])) ($ e-mail \u003d $ _Post ["Email"]; si ($ e-mail \u003d\u003d "") (Déset (e-mail $);) // Nous sommes entrés dans l'utilisateur e-mail entré par l'utilisateur, s'il est vide, alors nous détruisons la variable
Si (Isset ($ login) et Isset ($ email)) ( // s'il y a des variables nécessaires

Inclure ("bd.php");

$ résultat \u003d mysql_query ("Sélectionnez l'identifiant des utilisateurs où login \u003d" $ Connexion "et email \u003d" $ email "et actif \u003d" 1 "", $ db); // telmensongew.utilisateure.- homme
$ myrow \u003d mysql_fetch_array ($ Résultat);
Si (vide ($ myrow ["id]) ou $ myrow [id"] \u003d\u003d "") (
// S'il n'y a pas d'utilisateur activé avec une telle adresse de connexion et de messagerie
Quitter ("utilisateur avec une telle adresse e-mail n'a été détecté dans aucune base de données de la CIA :) la page principale");
}
// Si l'utilisateur est trouvé avec un tel identifiant et un e-mail, il est nécessaire de générer un mot de passe aléatoire pour lui, rafraîchissez-le dans la base de données et d'envoyer à l'e-mail.
$ Datenow \u003d date ("ymdhis"); // retirez la date
$ new_password \u003d md5 ($ datenow); // chiffrer la date
$ new_password \u003d substr ($ new_password, 2, 6); // Retirez 6 caractères du chiffre de la seconde. Ce sera notre mot de passe aléatoire. Ensuite, nous l'écrivons à la base de données en cryptant de la même manière que d'habitude.

$ new_password_sh \u003d str devev (MD5 ($ new_password)). "B3P6F"; // cryé
Mysql_query ("Mettre à jour les utilisateurs définir le mot de passe \u003d" $ new_password_sh "où login \u003d" $ login "", $ dB); // mise à jourdansbase
// formant un message

$ Message \u003d "Bonjour," $ Connexion. "Nous avons généré un mot de passe pour vous, vous pouvez maintenant entrer le site CITNAME.RU, l'utiliser. Après l'entrée, il est souhaitable de la modifier. Mot de passe: \\ N." $ new_password; // texte de message
Mail ($ email, "récupération du mot de passe", $ message "Type de contenu: Texte / Avion; Charset \u003d Windows-1251 \\ R \\ N"); // envoyerun message

Écho " Votre e-mail a envoyé une lettre avec mot de passe. Vous serez déplacé après 5 secondes. Si vous ne voulez pas attendre, cliquez ici. "; // rediriger l'utilisateur
}
AUTRE ( // si les données n'ont pas encore été introduites
Écho "


Mot de passe oublié?


Mot de passe oublié?



Entrez votre identifiant:



Entrer votre Email:






";
}
?>

Ensuite, nous ferons une entrée automatique. Cela fonctionnera comme ceci: avec une bonne entrée avec une case à cocher pressée dans le cookie, auto \u003d "oui" s'adaptera. Si le serveur voit cela dans le navigateur Auto \u003d "Oui", il démarrera la session et les variables prendront la même chose, dans le cookie. Ensuite, il y a un test de sessions de base de données.

Ouvert testère.. php. Et ajoutez le code après une entrée réussie:

Si (Isset ($ _ POST ["SAVE"])) (
// Si l'utilisateur souhaite que ses données soient conservées pour une entrée ultérieure, nous gardons dans les cookies de son navigateur

Setcookie ("id", $ myrow ["id"], heure () + 9999999);)
si (Isset ($ _ POST ["AUTOVHOD"])) (
// si l'utilisateur souhaite entrer automatiquement le site
Setcookie ("auto", "oui", heure () + 9999999);
Setcookie ("Connexion", $ _Post ["Login"], Time () + 9999999);
setcookie ("mot de passe", $ _post ["mot de passe"], heure () + 9999999);
Setcookie ("id", $ myrow ["id"], heure () + 9999999);)

Maintenant, vous devez commencer la session au bon endroit si vous avez une entrée automatique. Ouvert index.php. Et écrivez au tout début de la page:

// La procédure entière fonctionne aux sessions. Il en est que les données utilisateur sont stockées lorsqu'elles sont sur le site. Il est très important de les lancer au tout début de la page !!!
session_start ();
Inclure ("bd.php"); // Le fichier bd.php doit être dans le même dossier que tout le monde, sinon change simplement le chemin
Si (Isset ($ _ cookie ["auto"]) et Isset ($ _ cookie ["COCKINE"]) et isset ($ _ cookie ["mot de passe"]))
{// Si nécessaire variables
Si ($ _Cookie ["auto"] \u003d\u003d "oui") ( // Si l'utilisateur souhaite entrer automatiquement, lancez la session.
$ _Session ["mot de passe"] \u003d strIV (MD5 ($ _ cookie ["mot de passe"])). "B3P6F"; // dans les cookies, le mot de passe n'a pas été crypté et dans des sessions généralement stockées cryptées
$ _Session ["login"] \u003d $ _ cookie ["login"]; // sessiondeconnexion
$ _Session ["id"] \u003d $ _ cookie ["id"]; //ID de l'utilisateur
}
}

Nous n'aurons même pas d'aide la sortie pour changer l'utilisateur! DANS sORTIR.. php. Les sessions sont supprimées qui sont toujours créées sur indice.. php.Merci à des cookies qui sont stockés depuis très longtemps! Faisons le fichier sORTIR.. php.Et puis il n'est pas fonctionnel dans le cas d'une connexion automatique. Nous devons juste éclaircir l'entrée automatique des cookies après avoir supprimé les variables de la session:

Setcookie ("auto", "", heure () + 9999999); // Nettoyer l'entrée automatique

Vous devez également ajouter à mettre à jour._ utilisateur.. php. Après avoir mis à jour le login dans la session:

$ _Session ["login"] \u003d $ Connexion; // mise à jour Connexion aux sessions
Si (Isset ($ _ cookie ["Login"])) (
Setcookie ("login", $ Connexion, heure () + 9999999); // Améliorerconnexiondanscuisiniers
}

Et la même chose avec un mot de passe

$ résultat4 \u003d mysql_query ("Mettre à jour le mot de passe de mot de passe \u003d" $ mot de passe "où login \u003d" $ old_login "", $ dB); // améliorerle mot de passe
Si ($ résultat4 \u003d\u003d "vrai") ( // si vrai, puis mettez-le à la mettre à jour dans la session
$ _Session ["mot de passe"] \u003d $ mot de passe;
Si (Isset ($ _ cookie ["mot de passe"])) (
Setcookie ("mot de passe", $ _ post ["mot de passe"], heure () + 9999999); // Améliorerle mot de passedanscuisiniers, si unelles sontil y a
}

C'est ça. J'espère que vous réussirez! Bonne chance!

Session - Il s'agit d'un mécanisme qui vous permet de stocker certaines données sur le serveur uniques pour chaque utilisateur. Les lecteurs particulièrement attentifs trouveront une similitude avec biscuit. Et, en général, c'est la même chose. Cependant, le point clé: les données sont stockées non dans le navigateur de l'utilisateur, mais dans un fichier spécial sur le serveur.dont le nom est unique pour chaque utilisateur. Et unique session d'identifiant PHP. déjà stocké B. biscuit.

Laissez avec vous nous travaillerons avec des sessions en PHP. Et commençons S. sESSION_START () Fonctions. Cette fonctionnalité effectue les éléments suivants: Si l'utilisateur est arrivé en premier, crée un identifiant unique et l'écrit à biscuitEt crée également un nouveau fichier, encore une fois unique à l'utilisateur. Si l'utilisateur est déjà venu, le serveur lit la valeur d'un identifiant unique de biscuit Et, selon lui, désigne le fichier de session souhaité. De ce fichier Php. lit toutes les données et les place dans un tableau $ _Session.. Écrivons un code simple dans lequel nous écrivons une variable à la session ou lisons s'il a déjà été enregistré.

session_start ();
Si (IMSET ($ _ session ["nom"])) $ Nom \u003d $ _Session ["nom"];
Else $ _Session ["nom"] \u003d "15st";
Echo $ nom;
?>

Nous appelons d'abord session_Start () FonctionJ'ai décrit ci-dessus. Alors vérifier: s'il existe une variable " nom."En session. S'il y a, alors vous lisez les données de celui-ci et écrivez à la variable nom.. S'il n'y a pas (c'est-à-dire que l'utilisateur est venu pour la première fois), puis définissez la variable " nom."Au sens de la session" 15st.". La ligne suivante Sortie la valeur de la variable $ Nom.. Évidemment, lorsque vous démarrez d'abord, vous verrez une chaîne vide, mais dans la seconde, vous verrez la chaîne " 15st.", Trouvé de la session.

Je vous conseille maintenant d'entrer dans la barre d'adresse: " javaScript: documenter.cokie."(Entrez sur le même onglet que le script lancé). En conséquence, vous verrez les points suivants:" Phpsessid \u003d.". Juste une valeur Phpsessid. Et il est ainsi un identifiant unique.

Et que tout devient complètement clair, je vous conseille même de trouver dossier. Si vous utilisez Denwer, alors il se trouve dans le dossier " tMP.". Regardez les fichiers qui commencent" sess_"- C'est la même chose fichiers de session. Vous pouvez les ouvrir dans un bloc-notes simple.

Une autre propriété très importante est sessions en PHP. Puis si biscuit Stocke jusqu'à ce que le navigateur les supprime. Et le navigateur ne les supprime pas par défaut. Ensuite, les sessions sont conservées le temps spécifié dans paramètres PHP. La valeur par défaut est 15 minutes. C'est si vous utilisez authentification basée sur la session, puis après 15 minutes inaction Utilisateur, il devra à nouveau se connecter. Bien sûr, c'est bien, car si l'utilisateur oublie " Sortir", alors rien de mal ne se produira. Un attaquant ne sera pas en mesure d'utiliser le compte d'utilisateur. De plus, utiliser un cookie Ils peuvent être peints, se substituer à leur navigateur et, par conséquent, l'attaquant est autorisé sous des étrangers, ne sachant pas même le mot de passe. Et la session ne peut pas voler, car tous les paramètres sont stockés sur le serveur et vous n'en travaillerez pas.

Alors essayez dans votre pratique principalement utiliser des sessions, pas propre biscuit.

Et, enfin, je veux avertir de très erreur de cadre. Ne jamais sortir de données dans les navigateurs vers utilisation de la fonction Session_Start ()Sinon, cela donnera une erreur. C'est-à-dire qu'il est impossible d'écrire comme ceci:

Echo "bonjour";
session_start ();
?>

Lorsque vous démarrez ce script, une erreur se produira. La même règle était valable avec biscuit (setcookie () Fonction). Donc, je pense que tout est clair ici.

Quelles préoccupations sessions en PHP.Bien entendu, cela peut être utilisé pour stocker des données sur les statistiques, l'authentification, les paramètres utilisateur personnels et d'autres choses similaires.

Nous apprendrons à faire une authentification simple de l'utilisateur sur le site. Sur le site, il peut y avoir des pages uniquement pour les utilisateurs autorisés et ils fonctionneront pleinement, si vous y ajoutez notre bloc d'authentification. Pour la créer, vous avez besoin d'une base de données MySQL. Il peut avoir 5 colonnes (minimum), et peut-être plus si vous souhaitez ajouter des informations sur les utilisateurs. Nous appelons la base de données "useraud".

Créez-y les champs suivants: ID pour le nombre d'utilisateurs, UID pour un numéro d'identification d'utilisateur unique, Nom d'utilisateur pour le nom d'utilisateur, email pour son adresse e-mail Et mot de passe pour un mot de passe. Vous pouvez utiliser pour autoriser l'utilisateur et la base de données déjà existante, uniquement, comme dans le cas d'une nouvelle base de données, créez le tableau suivant.

Code mysql

Créer une table `utilisateurs` (id` int (11) non nul auto_incrènement,` uid` int (11) non , `Nom d'utilisateur` Texte non NULL,` Email` Texte non NULL, "Mot de passe" Texte non NULL, clé primaire ( `Id`)) moteur \u003d MyISAM par défaut Charset \u003d utf8 auto_incrènement \u003d 1;

Créez maintenant un fichier "sql.php". Il est chargé de se connecter à la base de données. Ce code, d'abord, crée des variables pour le serveur et l'utilisateur lorsqu'il se connecte au serveur. Deuxièmement, il choisira une base de données dans ce cas "useraud". Ce fichier doit être connecté à "log.php" et "reg.php" pour accéder à la base de données.

Code PHP

// votre nom d'utilisateur mysql $ passe \u003d "remédier"; // mot de passe $ conn \u003d mysql_connect ($ serveur, $ utilisateur, $ passe); // connexion au serveur $ dB \u003d mysql_select_db ("useraud", $ conn); // Sélectionnez la base de données Si (! $ DB) ( // Si vous ne pouvez pas sélectionner une base de données Echo "désolé, erreur: (/\u003e"; // montre un message d'erreur sortir (); // vous permet de travailler le reste des scripts PHP } ?>

Next Entry page, que ce soit appelé "login.php". Tout d'abord, il vérifie les données saisies pour les erreurs. La page a des champs pour le nom d'utilisateur, le mot de passe, le bouton d'envoi et le lien pour vous inscrire. Lorsque l'utilisateur clique sur le bouton "Connexion", le formulaire sera traité par code à partir du fichier "log.php", puis connectez-vous au système.

Code PHP

0) { // s'il y a des erreurs de session $ err \u003d "

"; // Démarrez une table pour acheter ($ _Session [" errsg "] en tant que msg) ( // reconnaissance de chaque erreur $ err. \u003d " "; // enregistrer dans la variable ) $ err. \u003d "
"$ Msg."
"; // fermeture de la table Non défini ($ _session ["errsg"]); // Supprimer la session } ?> Formulaire de connexion
Nom d'utilisateur
Mot de passe
enregistrement

Ensuite, nous écrivons un script pour vous connecter. Appelons-le "log.php". Il dispose d'une fonctionnalité pour nettoyer les données d'entrée d'injections SQL que votre script peut être gâté. Deuxièmement, il reçoit ces formulaires et les vérifie dans l'exactitude. Si les données d'entrée sont correctes, le script envoie l'utilisateur à la page d'utilisateurs autorisés, sinon, définit les erreurs et envoie l'utilisateur à la page de connexion.

Code PHP

// Démarrer la session pour l'enregistrement Fonction Fix ($ Str) (// Nettoyage $ STR \u003d champs de garniture ($ STR); if (get_magic_quotes_gpc ()) ($ str \u003d Stripslashes ($ ST);); // tableau pour sauver des erreurs $ erflag \u003d faux; // drapeau d'erreur $ nom d'utilisateur \u003d correction ($ _ post ["Nom d'utilisateur"]); //Nom d'utilisateur $ mot de passe \u003d correction ($ _ post ["mot de passe"]); // mot de passe) // vérification du mot de passe Si ($ mot de passe \u003d\u003d "") ($ errtg \u003d "mot de passe manquant"; // error $ erflag \u003d true; // lève le drapeau en cas d'erreur) // Si le drapeau d'erreur est soulevé, renvoie au formulaire d'inscription // écrit des erreurs session_write_close (); // Séance de fermeture // Redirection sortir (); ) // demande de base de données $ Qry \u003d "SELECT * des utilisateurs" d'utilisateurs "où` nom d'utilisateur` \u003d "$ nom d'utilisateur" et` mot de passe` \u003d "". MD5 (mot de passe $). "" "; $ résultat \u003d mysql_query ($ qry); // chèque, si la demande a été réussie (il y a des données sur elle) Si (mysql_num_rows ($ résultat) \u003d\u003d 1) (tandis que ($ Row \u003d mysql_fetch_assoc ($ Résultat)) ($ _session ["uid"] \u003d $ "]; // Recevez UID de la base de données et placez-la dans la session $ _Session ["nom d'utilisateur"] \u003d $ nom d'utilisateur; // définit si le nom de l'utilisateur coïncide avec la session session_write_close (); // Séance de fermeture Tête ("Lieu: membre.php"); // Redirection )) Ailleurs ($ _session ["errsg"] \u003d "nom d'utilisateur ou mot de passe invalide"; // session_write_close (); // Séance de fermeture Tête ("Emplacement: login.php"); // Redirection sortir (); )?\u003e.

Faisons la page d'inscription, appelons-le "register.php". Il ressemble à une page de connexion, n'a que plusieurs champs de plus, et au lieu de faire référence à l'enregistrement - un lien vers Login.php au cas où l'utilisateur dispose déjà d'un compte.

Code PHP

0) { // s'il y a des erreurs de session $ err \u003d "

"; // Démarrez la table de forach ($ _Session [" errsg "] en tant que msg) ( // définit chaque erreur $ err. \u003d " "; // les écrit dans la variable ) $ err. \u003d "
"$ Msg."
"; // fin du tableau non défini ($ _session [" errsg "]); // détruit la session } ?> Formulaire d'inscription
Nom d'utilisateur
E-mail
Mot de passe
Répéter le mot de passe
J'ai un compte

Nous ferons maintenant le script d'enregistrement dans le fichier "reg.php". Il sera activé "SQL.PHP" de se connecter à la base de données. La même fonctionnalité est également utilisée comme dans le script d'entrée pour nettoyer le champ de saisie. Variables installées pour erreurs possibles. Suivant - une fonction pour créer un identifiant unique qui n'a jamais été fourni auparavant. Ensuite, les données du formulaire d'inscription et vérifiées sont extraites. Vérifier que l'adresse e-mail est spécifiée dans format nécessaireDe plus, si le mot de passe est correctement spécifié correctement. Ensuite, le script vérifie si la base de données de l'utilisateur est avec le même nom, et s'il existe des rapports d'erreur. Et enfin, le code ajoute un utilisateur à la base de données.

Code PHP

// Démarrer la session pour l'enregistrement Fonction Fonction ($ str) (// champs de nettoyage $ str \u003d @trim ($ str); if (get_magic_quotes_gpc ()) ($ str \u003d Stripslashes ($ str);); retour mysql_real_escape_string($ Str); ) $ errsg \u003d tableau (); // matrice pour stocker des erreurs $ erflag \u003d faux; // erreur drapeau $ UID \u003d "12323543534523453451465685454"; // ID unique $ Nom d'utilisateur \u003d correction ($ _ post ["Nom d'utilisateur"]); //Nom d'utilisateur $ email \u003d $ _post ["email"]; // e-mail $ mot de passe \u003d correction ($ _ post ["Mot de passe"]); // mot de passe $ RCPassword \u003d correction ($ _ POST ["DWPPASSWORD"]); // Répétition du mot de passe // Vérifiez le nom de l'utilisateur Si ($ nom d'utilisateur \u003d\u003d "") ($ errsg \u003d "nom d'utilisateur manquant"; // error $ erflag \u003d true; vrai; // soulève le drapeau en cas d'erreur ) // Vérifiez l'e-mail si (! Eregi ("^ [_ A-Z0-9 -] + (_ _ A-Z0-9 -] +) * @ + (\\. (+) * (. ))) $ ", $ email) (// doit être conforme au format: [Email protégé] $ errsg \u003d "Email non valide"; // erreur $ errllag \u003d true; // soulève le drapeau en cas d'erreur } // vérification du mot de passe Si ($ mot de passe \u003d\u003d "") ($ errsg \u003d "mot de passe manquant"; // error $ erflag \u003d true; vrai; // soulève le drapeau en cas d'erreur } // vérifiant la répétition du mot de passe if ($ rasswordword \u003d\u003d "") ($ errtgsg \u003d "mot de passe répété manquant"; // error $ errlfag \u003d true; vrai; // soulève le drapeau en cas d'erreur } // validation du mot de passe Si (STRCMP ($ mot de passe, $ rasswordword)! \u003d 0) ($ errsg \u003d "mots de passe ne correspond pas"; // error $ erflag \u003d true; vrai; // soulève le drapeau en cas d'erreur } // chèque, si le nom d'utilisateur est gratuit Si ($ USERNAME! \u003d "") ($ Qry \u003d "SELECT * de" Utilisateurs "d'où` Nom d'utilisateur` \u003d "Nom d'utilisateur" "; // Demande à MySQL_Query ($ QRY); Si ($ Résultat); Si ($ Résultat); (si (mysql_num_rows ($ Résultat)\u003e 0) ( // si le nom est déjà utilisé $ errsg \u003d "nom d'utilisateur déjà utilisé"; // Message d'erreur $ Errlflag \u003d true; // soulève le drapeau en cas d'erreur ) mysql_free_result ($ résultat); ))) // Si les données n'ont pas réussi la validation, retourne au formulaire d'inscription. Si ($ erflag) ($ _Session ["errsg"] \u003d $ errsg; // Message d'erreur session_write_close (); // Séance de fermeture Tête ("Emplacement: register.php"); // Redirection sortir (); ) // Ajout de données à la base de données $ Qry \u003d "Insérez dans" UserAuth`.`.`sers` (`uid`,` nom d'utilisateur`, `e-mail" valeurs valeurs ("$ uid", "Nom d'utilisateur $" "," ". MD5 (mot de passe $)." ")"; $ résultat \u003d mysql_query ($ qry); // chèque, si une demande réussie d'ajout Si ($ Résultat) (echo "Merci d'être enregistré" $ USERName. "Veuillez entrer ici"; Sortie ();) singerie (mourir (" erreur, se référer à la version ultérieure ");)?\u003e

Vous devez toujours créer un script pour quitter l'utilisateur du système. Il arrête la session pour l'utilisateur avec cet identifiant et son nom unique, puis redirige l'utilisateur à la page de connexion.

Code PHP

Enfin, le script "auth.php" peut être utilisé pour effectuer des pages disponibles uniquement pour les utilisateurs autorisés. Il vérifie les données d'entrée et, si elles sont correctes, permettent à l'utilisateur de visualiser les pages et, sinon, demande à vous connecter. En outre, si quelqu'un essaie de pirater le site en créant une des sessions, elle sera interrompue comme en général.

Code PHP

L'une des conditions du code ci-dessus fait l'objet de la question.

Le code suivant doit être inséré sur la page pour les utilisateurs autorisés, il est appelé, par exemple, "membre.php", et vous pouvez être appelé comme vous s'il vous plaît.

Code PHP

Vous avez accès à cette page. Sortir ( )

L'authentification de l'utilisateur est prête!

La cloche.

Il y a ceux qui ont lu cette nouvelle devant vous.
Abonnez-vous pour recevoir des articles frais.
E-mail
Nom
Nom de famille
Comment voulez-vous lire la cloche
Sans spam