Heim >Backend-Entwicklung >PHP-Tutorial >PHP implementiert ein Authentifizierungsbeispiel durch Sitzungssteuerung
In diesem Artikel wird ein Beispiel für die PHP-Authentifizierung durch Sitzungssteuerung vorgestellt. Die Authentifizierung der Identität besteht darin, Daten über eine Sitzung zu übermitteln. Freunde in Not können kommen und es herausfinden.
Die Idee der Sitzungskontrolle besteht darin, Benutzer basierend auf einer Sitzung auf der Website verfolgen zu können. Der detaillierte Code ist hier zusammengestellt, Freunde in Not können darauf verweisen.
Übersicht
Das http-Protokoll ist zustandslos und der Server kann bei jeder Anfrage nicht zwischen Benutzern unterscheiden. Die PHP-Sitzungssteuerung gibt dem Benutzer einen Schlüssel (eine verschlüsselte Sitzungszeichenfolge), der auch ein Beweis für die Identität des Benutzers ist. Der Server speichert die Box (Datenbank, Speicherdatenbank oder Datei), die mit diesem Schlüssel geöffnet werden kann Verschiedene variable Informationen des Benutzers.
Traditionelle PHP-Sitzung mit
<?php //page1.php 启动一个会话并注册一个变量 session_start(); $_SESSION['user_var'] = "hello,codekissyoung!"; //这里的可以将$_SESSION理解为用户的箱子,实际的实现是php在服务器端生成的小文件 ?>
<?php //page2.php session_start(); echo $_SESSION['user_var'];//通过钥匙访问自己的箱子内的变量 $_SESSION['user_var'] = "bey,codekissyoung!"; ?>
<?php //page3.php 销毁钥匙,一般在用户注销时,访问page3.php文件 session_start(); session_destroy(); ?>
Stellen Sie eine Frage: Wo ist der Schlüssel? Haben Sie den Vorgang, dem Benutzer den Schlüssel zu geben, nicht gesehen?
Dieser Vorgang wird für uns von PHP hinter den Kulissen ausgeführt. Da Sie page1.php besuchen und das Programm ausgeführt wird, generiert session_start(); Nummer, Zeit usw.) eine PHPSESSID-Variable Wenn die HTTP-Antwort an den Client zurückgegeben wird, ist diese PHPSESSID bereits in Ihrem Browser-Cookie gespeichert. Bei jedem erneuten Besuch dieses Domainnamens wird die PHPSESSID an den Server gesendet. Diese PHPSESSID ist der Benutzerschlüssel, von dem ich hier spreche.
Noch eine Frage: Die Sicherheit dieser PHPSESSID: Ist sie leicht zu stehlen, leicht zu fälschen und leicht zu manipulieren?
Die Verwendung von HTTPS kann Manipulationen verhindern. Verwenden Sie nicht PHPSESSID, sondern generieren Sie einen geheimen Schlüssel für den Benutzer, um Fälschungen zu verhindern. Ob es leicht zu stehlen ist, darüber gibt es eigentlich keine Untersuchungen. Wenn Ihr Computer beispielsweise mit dem Internet verbunden ist und Hacker in Ihren Computer eindringen.
Speichern Sie den generierten geheimen Schlüssel im Browser-Cookie
Cookie setzen
setCookie (' key','value',time()+3600);
Cookie löschen
setCookie('key','' ,time ()-1);
Single Sign-On realisieren: Sitzungsfreigabe
Single Sign-On: Teilen Sie einen Satz Benutzerauthentifizierung zwischen mehreren Subsystemen des Systems , und Sie können auf alle Subsysteme zugreifen, indem Sie sich von einem Ort aus anmelden.
Stellen Sie sich dieses Szenario vor: Gehen Sie davon aus, dass die PHP-Umgebungen der Server A und B gleich sind. Der Benutzer hat seinen Schlüssel auf Server A erhalten und dann den Schlüssel genommen, um auf Server B zuzugreifen. Kennt er Server B?
Offensichtlich nicht, der Server erkennt den von Server A generierten Schlüssel nicht.
Lösung: Unabhängig davon, ob der Benutzer auf A oder B zugreift, wird der generierte Schlüssel in C (der gleichen Datenbank oder dem gleichen Cache-System) gespeichert. Wenn der Benutzer erneut auf A oder B zugreift, werden sowohl A als auch B wird Fragen wir C: Ist der Schlüssel dieses Benutzers korrekt? Wenn es korrekt ist, kann der Benutzer die in A oder B gespeicherte Box verwenden.
<?php session_regenerate_id();//重置 session 字符 $session_info=array('uid'=>$uid,'session'=>session_encrypt(session_id().time())); //下一步将,$session_info 存到 C 中 ?>
Das Folgende ist ein Beispiel für die PHP-Authentifizierung durch Sitzungssteuerung
Authentifizierungsanwendungstext: authmain.PHP
<?php //开启一个会话 session_start(); if((!isset($userid))||(!isset($password))) { $userid=$_POST['userid']; $password=$_POST['password']; //连接数据库 $db_conn=new mysqli("localhost", "root", "","auth"); if(mysqli_connect_errno()){ echo '连接数据库失败:'.mysqli_connect_error(); exit(); } //执行SQL查询语句 $query="SELECT * FROM authorized_users WHERE name='".$userid."' and password=sha1('".$password."')"; $result=$db_conn->query($query); if($result->num_rows>0){ //注册一个会话变量 $_SESSION['valid_user']=$userid; } //断开数据库连接 $db_conn->close(); } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>身份验证</title> </head> <body> <h1>主页</h1> <?php //判断用户是否已经登录 if(isset($_SESSION['valid_user'])){ echo $_SESSION['valid_user'].',您好,你已经登录'; echo '<a href="logout.php">退出登录</a><br/>'; }else{ if(isset($userid)){ echo '您没有登录成功'; }else{ echo '您还没有登录<br/>'; } ?> <form method="post" action="authmain.php"> <p>用户名:<input type="text" name="userid"></p> <p>密码:<input type="password" name="password"></p> <p><input type="submit" name="submit" value="登录"></p> </form> <?php } ?> <br/> <a href="members_only.php">登录进入</a> </body> </html>
Gültige Benutzerprüfung für Website: member_only.php
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>身份验证</title> </head> <body> <?php //启用会话 session_start(); echo '<h1>会员有效</h1>'; if(isset($_SESSION['valid_user'])){ echo "<p>".$_SESSION['valid_user'].",您好,您已经登录成功</p>"; echo '<p>会员可享受折扣优惠</p>'; }else{ echo '<p>您还没有登录成功</p>'; echo '<p>只有登录成功才能查看此页</p>'; } echo '<a href="authmain.php">返回主页</a>'; ?> </body> </html>
Protokoll Entfernen Sie die Sitzungsvariable und zerstören Sie die Sitzung: logout.php
<?php //启用会话 session_start(); $olduser=$_SESSION['valid_user']; //注销会话变量 unset($_SESSION['valid_user']); //销毁会话 session_destroy(); ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>退出登录</title> </head> <body> <h1>您退出登录了!</h1> <?php if(!empty($olduser)){ echo '退出登录了<br/>'; }else{ echo '您没有登录过,所以当然也不存在退出登录<br/>'; } ?> <a href="authmain.php">返回主页</a> </body> </html>
Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, das geht nützlich sein, um allen beim Lernen zu helfen.
Verwandte Empfehlungen:
php Zusammenfassung der Methoden zum Öffnen von Formatdateien
Memcache in der PHP-Datenbank Verwendung
phpDetaillierte Erläuterung der Verwendung rekursiver Funktionsfälle
Das obige ist der detaillierte Inhalt vonPHP implementiert ein Authentifizierungsbeispiel durch Sitzungssteuerung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!