首頁 後端開發 php教程 php透過會話控制實現身份驗證實例

php透過會話控制實現身份驗證實例

May 31, 2018 pm 02:21 PM
php 實現 身分

本文介紹了php透過會話控制實現身份驗證實例,身份的驗證是透過session提交資料的。有需要的朋友可以來了解一下。

會話控制的想法是指能夠在網站中根據一個會話追蹤使用者。這裡整理了詳細的程式碼,有需要的小夥伴可以參考下。

概述

http 協定是無狀態的,對於每個請求,服務端無法區分使用者。 PHP 會話控制就是給了使用者一把鑰匙(一個加密session字串),同時這也是使用者身分的一個證明,服務端存放了這把鑰匙能打開的箱子(資料庫,記憶體資料庫或是使用檔案做的),箱子裡面裝的就是使用者的各個變數資訊。

傳統的php session 使用

<?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();
?>
登入後複製

提一個問題,鑰匙呢?沒看見給用戶鑰匙的操作啊?

這個操作是php背後幫我們做了的,自從你訪問page1.php 程式運行,session_start();這句話時,php 會根據此刻的一些條件(用戶ip,瀏覽器號,時間等)產生一個PHPSESSID變量,http response 回客戶端後,這個PHPSESSID就已經存在你的瀏覽器cookie裡了,每次你再次訪問這個域名時,該PHPSESSID都會發送到服務端。這個PHPSESSID 就是我這裡說的用戶鑰匙了。

再一個問題,這個PHPSESSID的安全性,它是否容易被竊取,是否容易被偽造,是否容易被竄改?

使用 Https 可以防止被竄改。不使用PHPSESSID,而是自己產生一把秘鑰給使用者可以防止被偽造。至於是否容易被竊取,還真沒怎麼研究過。例如如果你電腦連網,駭客入侵你電腦。

將產生的秘鑰存入瀏覽器cookie中

  • #設定cookie

  • setCookie ('key','value',time() 3600);

  • #刪除cookie

  • setCookie('key','', time()-1);

實作單一登入:session共用

單一登入:多個子系統之間共用一套使用者驗證體系,在其中一處登錄,就可以存取所有子系統。

試想這麼一種情境:假設伺服器A與B的php環境一致。用戶在 伺服器A 上拿到了自己的鑰匙,然後他拿著這把鑰匙去訪問伺服器B,請問伺服器B認識麼?

很顯然不能,伺服器A產生的鑰匙,伺服器並不認識。

解決方法:使用者無論存取A或B,產生的鑰匙我都儲存在C(同一個資料庫,或快取系統)中,使用者再次存取A或B時,A和B都去問下C:這個用戶的鑰匙對麼?對的話,使用者就可以使用自己存在A或B那裡的箱子了。

<?php
session_regenerate_id();//重置 session  字符
$session_info=array(&#39;uid&#39;=>$uid,&#39;session&#39;=>session_encrypt(session_id().time()));
//下一步将,$session_info 存到 C 中
?>
登入後複製

以下是php透過會話控制實作身分驗證實例

身份驗證應用程式主體: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>
登入後複製

網站的有效使用者檢查:members_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>
登入後複製

#註銷會話變數並銷毀會話: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>
登入後複製

總結:以上就是這篇文章的全部內容,希望能對大家的學習有所幫助。

相關推薦:

php格式檔案開啟方法總結

PHP資料庫中memcache的用法

php#遞迴函數案例使用詳解

##

以上是php透過會話控制實現身份驗證實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1662
14
CakePHP 教程
1419
52
Laravel 教程
1312
25
PHP教程
1262
29
C# 教程
1235
24
您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP行動:現實世界中的示例和應用程序 PHP行動:現實世界中的示例和應用程序 Apr 14, 2025 am 12:19 AM

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

See all articles