Heim > Backend-Entwicklung > PHP-Tutorial > PHP implementiert das Authentifizierungsbeispiel über das Beispiel session control_php

PHP implementiert das Authentifizierungsbeispiel über das Beispiel session control_php

WBOY
Freigeben: 2023-03-02 22:46:02
Original
1283 Leute haben es durchsucht

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-Sitzungsnutzung

<&#63;php
//page1.php 启动一个会话并注册一个变量
session_start();
$_SESSION['user_var'] = "hello,codekissyoung!";
//这里的可以将$_SESSION理解为用户的箱子,实际的实现是php在服务器端生成的小文件
&#63;>
Nach dem Login kopieren
<&#63;php
//page2.php
session_start();
echo $_SESSION['user_var'];//通过钥匙访问自己的箱子内的变量
$_SESSION['user_var'] = "bey,codekissyoung!";
&#63;>
Nach dem Login kopieren
<&#63;php
//page3.php 销毁钥匙,一般在用户注销时,访问page3.php文件
session_start();
session_destroy();
&#63;>
Nach dem Login kopieren

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 im Hintergrund ausgeführt. Da Sie auf page1.php zugreifen und das Programm session_start(); ausführen, generiert PHP es basierend auf einigen aktuellen Bedingungen (Benutzer-IP, Browsernummer, Uhrzeit). usw.) Eine PHPSESSID-Variable, nachdem die http-Antwort an den Client zurückgegeben wurde, ist diese PHPSESSID bereits in Ihrem Browser-Cookie gespeichert. Jedes Mal, wenn Sie diesen Domainnamen erneut besuchen, 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 verhindert Manipulationen. 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

  • Cookies setzen
  • setCookie('key','value',time()+3600);
  • Cookies löschen
  • setCookie('key','',time()-1);

Erreichen Sie Single Sign-On: Sitzungsfreigabe

Single Sign-On: Mehrere Subsysteme teilen sich ein Benutzerauthentifizierungssystem. Wenn Sie sich an einem Ort anmelden, können Sie auf alle Subsysteme zugreifen.

Stellen Sie sich dieses Szenario vor: Gehen Sie davon aus, dass die PHP-Umgebungen der Server A und B identisch 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 von Server A generierte Schlüssel wird vom Server nicht erkannt.

Lösung: Unabhängig davon, ob der Benutzer auf A oder B zugreift, wird der generierte Schlüssel in C (der gleichen Datenbank oder demselben Cache-System) gespeichert. Wenn der Benutzer erneut auf A oder B zugreift, werden sowohl A als auch B C fragen: Dies Ist der Schlüssel des Benutzers korrekt? Wenn es korrekt ist, kann der Benutzer die in A oder B gespeicherte Box verwenden.

<&#63;php
session_regenerate_id();//重置 session  字符
$session_info=array('uid'=>$uid,'session'=>session_encrypt(session_id().time()));
//下一步将,$session_info 存到 C 中
&#63;>
Nach dem Login kopieren

Das Folgende ist ein Beispiel für die PHP-Authentifizierung durch Sitzungssteuerung

Authentifizierungsanwendungsprinzipal: authmain.PHP

<&#63;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(); 
} 
&#63;> 
<!DOCTYPE html> 
<html> 
<head> 
  <meta charset="UTF-8"> 
  <title>身份验证</title> 
</head> 
<body> 
<h1>主页</h1> 
<&#63;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/>'; 
  } 
  &#63;> 
  <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> 
<&#63;php 
} 
&#63;> 
<br/> 
<a href="members_only.php">登录进入</a> 
 
</body> 
</html> 
Nach dem Login kopieren

Gültige Benutzerprüfung für Website: member_only.php

<!DOCTYPE html> 
<html> 
<head> 
  <meta charset="UTF-8"> 
  <title>身份验证</title> 
</head> 
<body> 
<&#63;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>'; 
&#63;> 
</body> 
</html> 
Nach dem Login kopieren

Sitzungsvariablen abmelden und die Sitzung zerstören: logout.php

<&#63;php 
//启用会话 
session_start(); 
$olduser=$_SESSION['valid_user']; 
//注销会话变量 
unset($_SESSION['valid_user']); 
//销毁会话 
session_destroy(); 
&#63;> 
<!DOCTYPE html> 
<html> 
<head> 
  <meta charset="UTF-8"> 
  <title>退出登录</title> 
</head> 
<body> 
<h1>您退出登录了!</h1> 
<&#63;php 
if(!empty($olduser)){ 
  echo '退出登录了<br/>'; 
}else{ 
  echo '您没有登录过,所以当然也不存在退出登录<br/>'; 
} 
&#63;> 
<a href="authmain.php">返回主页</a> 
</body> 
</html> 
Nach dem Login kopieren

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Studium aller hilfreich sein wird. Ich hoffe auch, dass jeder Script House unterstützt.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage