Heim  >  Artikel  >  Backend-Entwicklung  >  PHP implementiert ein Authentifizierungsbeispiel durch Sitzungssteuerung

PHP implementiert ein Authentifizierungsbeispiel durch Sitzungssteuerung

墨辰丷
墨辰丷Original
2018-05-31 14:21:00832Durchsuche

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[&#39;user_var&#39;] = "hello,codekissyoung!";
//这里的可以将$_SESSION理解为用户的箱子,实际的实现是php在服务器端生成的小文件
?>

<?php
//page2.php
session_start();
echo $_SESSION[&#39;user_var&#39;];//通过钥匙访问自己的箱子内的变量
$_SESSION[&#39;user_var&#39;] = "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(&#39;uid&#39;=>$uid,&#39;session&#39;=>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[&#39;userid&#39;]; 
  $password=$_POST[&#39;password&#39;]; 
//连接数据库 
$db_conn=new mysqli("localhost", "root", "","auth"); 
if(mysqli_connect_errno()){ 
  echo &#39;连接数据库失败:&#39;.mysqli_connect_error(); 
  exit(); 
} 
//执行SQL查询语句 
$query="SELECT * FROM authorized_users WHERE name=&#39;".$userid."&#39; and password=sha1(&#39;".$password."&#39;)"; 
$result=$db_conn->query($query); 
if($result->num_rows>0){ 
  //注册一个会话变量 
  $_SESSION[&#39;valid_user&#39;]=$userid; 
} 
//断开数据库连接 
$db_conn->close(); 
} 
?> 
<!DOCTYPE html> 
<html> 
<head> 
  <meta charset="UTF-8"> 
  <title>身份验证</title> 
</head> 
<body> 
<h1>主页</h1> 
<?php 
//判断用户是否已经登录 
if(isset($_SESSION[&#39;valid_user&#39;])){ 
  echo $_SESSION[&#39;valid_user&#39;].&#39;,您好,你已经登录&#39;; 
  echo &#39;<a href="logout.php">退出登录</a><br/>&#39;; 
}else{ 
  if(isset($userid)){ 
    echo &#39;您没有登录成功&#39;; 
  }else{ 
    echo &#39;您还没有登录<br/>&#39;; 
  } 
  ?> 
  <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 &#39;<h1>会员有效</h1>&#39;; 
if(isset($_SESSION[&#39;valid_user&#39;])){ 
  echo "<p>".$_SESSION[&#39;valid_user&#39;].",您好,您已经登录成功</p>"; 
  echo &#39;<p>会员可享受折扣优惠</p>&#39;; 
}else{ 
  echo &#39;<p>您还没有登录成功</p>&#39;; 
  echo &#39;<p>只有登录成功才能查看此页</p>&#39;; 
} 
echo &#39;<a href="authmain.php">返回主页</a>&#39;; 
?> 
</body> 
</html>

Protokoll Entfernen Sie die Sitzungsvariable und zerstören Sie die Sitzung: logout.php

<?php 
//启用会话 
session_start(); 
$olduser=$_SESSION[&#39;valid_user&#39;]; 
//注销会话变量 
unset($_SESSION[&#39;valid_user&#39;]); 
//销毁会话 
session_destroy(); 
?> 
<!DOCTYPE html> 
<html> 
<head> 
  <meta charset="UTF-8"> 
  <title>退出登录</title> 
</head> 
<body> 
<h1>您退出登录了!</h1> 
<?php 
if(!empty($olduser)){ 
  echo &#39;退出登录了<br/>&#39;; 
}else{ 
  echo &#39;您没有登录过,所以当然也不存在退出登录<br/>&#39;; 
} 
?> 
<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!

Stellungnahme:
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