PHP程序設計項目化教程課件 項目6 用戶注冊平臺-前后端數據交互_第1頁
PHP程序設計項目化教程課件 項目6 用戶注冊平臺-前后端數據交互_第2頁
PHP程序設計項目化教程課件 項目6 用戶注冊平臺-前后端數據交互_第3頁
PHP程序設計項目化教程課件 項目6 用戶注冊平臺-前后端數據交互_第4頁
PHP程序設計項目化教程課件 項目6 用戶注冊平臺-前后端數據交互_第5頁
已閱讀5頁,還剩128頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

用戶注冊平臺

——前后端數據交互

項目6張華同學在日常生活中發現,同學們在購買學習資料和生活用品時,常常面臨著煩瑣的購買流程和耗時的等待。為了解決這一實際問題,他萌生了一個想法—開發一個便捷的校園購物平臺。為了實現這一目標首要任務是構建一個用戶注冊平臺,該系統需包含簡潔的注冊表單以方便用戶填寫信息,并確保前后端數據能夠順暢交互與準確存儲。通過這個平臺的實現,同學們將能享受到更加便捷、高效的購物體驗。他們將能夠輕松注冊賬戶,并體驗到個性化的購物服務,從而節省時間,使校園生活更加豐富多彩。用戶注冊平臺熟悉表單基本結構,掌握表單的基本操作,包括表單的創建、表單數據的獲取等;理解HTTP的基本原理,熟悉HTTP的基本構成;熟悉Cookie和Session的原理,掌握Cookie的基本操作方法;熟悉正則表達式的概念、語法格式,掌握正則表達式的常用函數和基本操作方法。能夠使用表單實現前后端數據交互;能夠區分HTTP請求報文和HTTP響應報文;能夠利用Cookie保存用戶信息、利用Session保存會話數據;能夠利用正則表達式函數實現字符串匹配、替換、分割等功能。培養良好的數據處理習慣和編程習慣,注重數據安全和隱私保護;提高問題解決能力,能夠獨立解決PHP前后端數據交互的操作問題;培養創新思維,能夠運用前后端數據交互知識解決實際問題,為軟件開發和系統管理貢獻力量。表單基礎與數據交互HTTP基礎Cookie和Session技術正則表達式表單基礎與數據交互PART01表單在Web設計中扮演著關鍵角色,它允許用戶輸入數據,如注冊信息、登錄憑證或留言內容等,然后這些數據會被發送到服務器進行處?理。6.1表單基礎與數據交互表單的基本結構由<form>標簽來定義,該標簽內部包含各種表單控件,如<input>、<textarea>、<select>等,用于收集用戶的輸入內容。6.1.1創建表單<formname="form1"action="register.php"method="post"enctype="multipart/form-data"><!--表單控件將放置在這里--></form><form>標簽包含4個屬性,其具體含義如下表所?示。表單控件是用于用戶與表單交互的元素。(1)<input>標簽<input>標簽在Web表單中用于創建單行文本輸入控件。通過調整其type屬性,可以輕松定義不同類型的輸入字段,包括常見的文本框、密碼框、文件上傳域等。6.1.2添加表單控件<!--文本框--><inputtype="text"name="user"value="admin"><!--密碼框--><inputtype="password"name="pwd"><!--文件上傳域--><inputtype="file"name="upload"><!--隱藏域--><inputtype="hidden"name="yc"value=""><!--“提交”按鈕--><inputtype="submit"value="提交"><!--“重置”按鈕--><inputtype="reset"value="重置">(1)<input>標簽<input>標簽還可以設置單選按鈕和復選框,如果具有相同的name屬性,它們將被視為一個組,用戶可以選擇其中的一個或多個選項。6.1.2添加表單控件<!--單選按鈕:性別選擇--><inputtype="radio"id="male"name="gender"value="male"checked>男<inputtype="radio"id="female"name="gender"value="female">女<!--復選框:愛好選擇--><inputtype="checkbox"name="interests[]"value="reading">閱讀<inputtype="checkbox"name="interests[]"value="sports">運動<inputtype="checkbox"name="interests[]"value="music">音樂<inputtype="checkbox"name="interests[]"value="traveling">旅行(2)<textarea>標簽<textarea>標簽用于創建一個多行文本輸入區域,適用于用戶輸入或編輯大量文本內容的場景,如博客文章、留言等。通過設置cols和rows屬性,可以控制文本輸入區域的大小。6.1.2添加表單控件<textareaname="message"cols="20"rows="5"><!--文本內容--></textarea>(3)<select>標簽<select>標簽用于創建下拉列表,用戶可以從預定義的選項中選擇一個值。6.1.2添加表單控件<selectname="area">

<optionselected>--請選擇--</option>

<optionvalue="Beijing">北京</option>

<optionvalue="Shanghai">上海</option>

<optionvalue="Guangzhou">廣州</option>

<optionvalue="Shenzhen">深圳</option></select>(4)<label>標簽<label>標簽的作用是為<input>標簽定義標注。<label>標簽不會向用戶呈現任何特殊效果,但是它為鼠標用戶提高了可用性。當用戶選擇該標簽時,瀏覽器會自動將焦點轉到和標簽相關的表單控件上。6.1.2添加表單控件<labelfor="username">用戶名:</label>

<inputtype="text"id="username"name="username">

在Web應用中,表單數據提交的方式決定了數據如何被發送到服務器。這主要通過<form>標簽的method屬性來設置數據的提交方式,通常包括GET方式和POST方式,取值分別對應get和post。它們主要有以下區?別。6.1.3提交表單數據代碼重用性POST方式數據在HTTP請求體中發送,不顯示在URL中,適用于提交大量數據或敏感信息(如密碼)的場景。POST方式更為安全,因為它不會將數據暴露在URL中。代碼重用性GET方式提交的數據附加在URL后發送,適用于提交少量非敏感數據來獲取信息的場景,如搜索查詢。使用GET方式時,用戶輸入的數據將顯示在瀏覽器的地址欄中,這可能導致數據泄露或隱私問?題。method屬性取值為get的示例(不推薦用于敏感信息傳輸)。6.1.3提交表單數據<formmethod="get">關鍵詞:<inputtype="text"name="keyword"><inputtype="submit"value="搜索"></form>在“關鍵詞”的文本框中輸入“PHP開發技術”并單擊“搜索”按鈕后,會發現瀏覽器地址欄中的URL新增了“?keyword=PHP開發技術”這樣的字符串。method屬性取值為post的示例(推薦用于注冊、登錄等場景)。6.1.3提交表單數據<formmethod="post">用戶名:<inputtype="text"name="username">密碼:<inputtype="password"name="password"><inputtype="submit"value="注冊"></form>輸入“用戶名”和“密碼”,單擊“注冊”按鈕,用戶提交的數據將被包含在HTTP請求體中,不會在URL中顯示,這使得POST方式在處理敏感信息時更為安全。6.1.4獲取表單提交的數據在Web應用中,表單是用戶與服務器交互的重要橋梁。當用戶填寫并提交表單后,服務器需要接收這些數據并進行相應的處理。PHP提供了超全局變量,這些變量允許我們在腳本的任何位置訪問用戶提交的數?據。1.超全局變量簡介PHP中的超全局變量是接收表單數據的得力助手,如下表所?示。6.1.4獲取表單提交的數據2.獲取POST方式提交的數據POST方式是提交表單數據的常用方式,特別是當需要發送大量數據或敏感數據時。通過POST方式提交的數據不會在URL中顯示,從而提高了安全?性。當PHP收到來自瀏覽器通過POST方式提交的表單后,表單中的數據會被保存到預定義的超全局變量數組即$_POST數組中,當需要查看所有通過表單提交來的數據時,可以使用var_dump()函數或者print_r()函數輸出數組。當需要獲取username字段的值時,可直接訪問數組的元素。print_r($_POST);echo$_POST['username'];6.1.4獲取表單提交的數據通過用戶登錄演示獲取POST方式提交的表單數據。<body><formmethod="post"action="post.php"><p>用戶名:<inputtype="text"name="username"value=""></p><p>密碼:<inputtype="password"name="password"value=""></p><p><inputtype="submit"value="登錄"></p></form></body>6.1.4獲取表單提交的數據用戶登錄的表單中設置action屬性,該屬性可指定表單數據提交后將由哪個腳本處理,這里設置的腳本是post.php。<?php//獲取POST方式提交的數據$username=$_POST["username"];$password=$_POST["password"];echo"用戶名:".$username."<br>";echo"密碼:".$password;echo"<pre>";print_r($_POST);echo"</pre>";?>6.1.4獲取表單提交的數據啟動內置服務器,在瀏覽器中打開表單頁面,輸入“用戶名”和“密碼”,單擊“登錄”按鈕。6.1.4獲取表單提交的數據HTML表單中也可以不設置action屬性,表示將數據提交給當前頁面,這樣只需要一個PHP文件。其中,使用isset($_POST['submit'])判斷是否單擊了“登錄”按鈕,然后使用$_POST數組變量接收表單信?息。6.1.4獲取表單提交的數據運行效果如圖所?示。6.1.4獲取表單提交的數據3.獲取GET方式提交的數據GET方式是HTML表單中method屬性的默認值,用于將數據附加到URL的查詢字符串部分進行傳輸。這種方式存在兩個主要限制:一是由于URL長度有限,所能提交的數據量也受到限制;二是數據以明文形式出現在URL中,在傳輸敏感信息(如密碼)時存在安全風險。例如,若一個表單的method屬性被設置為GET,當用戶提交表單后,瀏覽器地址欄可能會顯示如下URL。上述URL中,username和password是表單字段的名稱,而admin和123456則是用戶輸入的具體內容。由于這些數據直接暴露在URL中,不僅易于被截取,數據量也受到URL長度的制約。GET方式傳輸的數據可通過訪問$_GET數組(使用方法同$_POST數組)。login.php?username=admin&password=123456實現簡單的用戶登錄和驗證,登錄表單頁面html代碼如?下。【案例實踐6-1】實現簡單的用戶登錄和驗證php文件用來接收并驗證表單提交的數據。【案例實踐6-1】實現簡單的用戶登錄和驗證運行結果如下圖所?示。在兩個文本框中分別輸入admin和123456,然后單擊“提交”按鈕,結果如下圖所?示。【案例實踐6-1】實現簡單的用戶登錄和驗證【能力進階】使用超全局變量$_SERVER可以查看服務器的相關信息,這些信息由Web服務器和運行環境生成,常常在編寫PHP腳本時用于獲取關于請求和服務器環境的重要數?據。$_SERVER是一個包含諸如頭信息(header)、路徑(path)和腳本位置(scriptlocations)的數組。$_SERVER是一個超全局變量,可以在腳本的任何地方訪問它,無須使用global關鍵?字。常用的$_SERVER超全局變量說明如下。$_SERVER['REMOTE_ADDR']:當前頁面用戶的IP地?址。$_SERVER['REQUEST_URI']:請求的文件路徑及查詢字符?串。$_SERVER['HTTP_USER_AGENT']:客戶端瀏覽器的用戶代理字符?串。$_SERVER['REQUEST_METHOD']:請求頁面時使用的請求方式(例如GET、HEAD、POST、PUT)。$_SERVER超全局變量【能力進階】在PHP中處理用戶提交的表單數據時,可使用以下兩種方法來判斷是否單擊了“提交”按鈕。判斷表單是否被提交if($_SERVER["REQUEST_METHOD"]=="POST")if(isset($_POST['submit']))【能力進階】如果在同一個頁面中并且是GET請求的話,使用$_SERVER["REQUEST_METHOD"]會出錯,具體示例代碼如下所示。這里需要使用isset($_GET['submit'])進行判?斷。判斷表單是否被提交<body><form>搜索:<inputtype="text"name="name"id="name"><inputtype="submit"value="提交"name="submit"><?php

if($_SERVER["REQUEST_METHOD"]=="GET")echo"您填寫的搜索內容是{$_GET['name']}";?></form></body>【能力進階】在PHP項目開發中,GET和POST是實現前后端數據交互的兩大核心技術,它們具有各自的特點和適用場景,二者的比較如下表所?示。深入理解GET與POST6.1.5處理表單數組數據在表單設計中,當需要用戶選擇多個選項時,例如興趣愛好、技能列表等,通常會使用復選框。為了能夠在服務器端處理這些選項,需要將復選框的name屬性設置為數組形式。以技能列表為例,假設有一個表單,用戶可以在其中選擇自己擁有的技能。復選框的name屬性被設置為skills[],表示這是一個數組。當用戶選擇多個技能并提交表單時,所有選中的技能的值都會被收集到一個名為skills的數組中。<formmethod="post"action="skills.php"><inputtype="checkbox"name="skills[]"value="coding">編程<inputtype="checkbox"name="skills[]"value="design">設計<inputtype="checkbox"name="skills[]"value="project_management">項目管理<inputtype="checkbox"name="skills[]"value="communication">溝通<inputtype="submit"value="提交"></form>6.1.5處理表單數組數據檢查是否有一個名為skills的數組被提交。如果有,就遍歷這個數組并輸出每個技能。如果用戶沒有選擇任何技能,則會輸出相應的提示信?息。//檢查是否有skills數組被提交if(isset($_POST['skills'])&&is_array($_POST['skills'])){//輸出技能列表echo"您選擇的技能包括:";foreach($_POST['skills']as$skill){echo$skill."";}}else{echo"沒有選擇任何技能。";}創建一個簡單的網頁表單,讓學生選擇他們感興趣的課外活動。使用復選框來實現多個活動的選擇,服務器將接收學生的選擇并顯示他們所選的活動。【案例實踐6-2】學生課外活動選擇表單編寫php文件來接收并顯示學生選擇的課外活動。【案例實踐6-2】學生課外活動選擇表單啟動內置服務器,在瀏覽器中打開表單頁面,勾選多個課外活動的復選框,單擊“提交選擇”按鈕。【案例實踐6-2】學生課外活動選擇表單6.1.6查詢字符串與URL參數傳遞在Web開發中,查詢字符串是一種將數據從客戶端傳遞到服務器端的常見方式,特別是在使用GET請求時。查詢字符串被附加在URL之后,以?開始,后面跟著參數名和參數值對,多個參數之間使用&符號分隔。這些參數和值可以被服務器用來執行特定的操作或返回特定的數據。例如,在人郵教育網站搜索PHP。這個例子中,type和q是參數名,而book和PHP是參數值。服務器可以解析這個URL,獲取這些參數和值,并據此進行相應的處?理。6.1.7使用查詢字符串實現前后端數據交互使用查詢字符串是URL中傳遞數據的一種常見方式,常與GET請求結合使用。雖然POST請求在處理重要數據或大量數據時更受歡迎,但在某些簡單的數據交互場合,查詢字符串與GET請求的組合仍然非常方便和高?效。當用戶單擊不同的新聞標題時,可通過URL中的查詢字符串傳遞新聞的ID或其他唯一標識符,返回相應的新聞內?容。首先,創建新聞列表,列出所有新聞的標題。每個標題都應該鏈接到一個URL,該URL包含新聞的ID作為查詢字符串參數。【案例實踐6-3】動態展示新聞列表然后,創建PHP文件來處理獲取新聞詳情的請求,能夠讀取查詢字符串中的新聞ID,并從數據源中獲取相應新聞內容。【案例實踐6-3】動態展示新聞列表啟動內置服務器,在瀏覽器中打開前端新聞列表頁面,單擊某一條新聞,PHP會調用php文件處理從前端HTML頁面接收的查詢字符串。【案例實踐6-3】動態展示新聞列表【能力進階】當使用GET方式提交表單時,表單數據會被附加到URL的查詢字符串中,并發送給服務器。然而,如果表單中包含敏感信息或大量數據,使用GET方式可能不是最佳選擇,因為這些數據會在瀏覽器的歷史記錄、服務器日志和網絡監控工具中留下痕?跡。如果在使用GET請求的頁面中已經存在查詢字符串,例如用于頁面狀態或設置的參數,提交表單時這些原有的查詢字符串可能會被表單數據覆蓋,例如:對GET請求與查詢字符串的理解<body><formaction="get.php?flag=1"><p>請輸入要查詢的關鍵字:<inputtype="text"name="keywords"></p><p><inputtype="submit"name="submit"value="查詢"></p></form></body>【能力進階】在get.php腳本中,我們既要獲取查詢字符串的內容,又要獲取前端傳送過來的關鍵字,示例代碼如下。運行結果如下圖所?示。對GET請求與查詢字符串的理解if(isset($_POST['submit'])){if($_GET['flag']==1)echo"這是您要搜索的內容:{$_GET['keywords']}。";elseecho"顯示錯誤。";}【能力進階】在以上例子中,最終的URL變成“http://localhost:3000/get.php?keywords=PHP技術&submit=搜索”,原來的URL中flag=1的查詢字符串會丟?失。為避免上述情況,應使用POST方式提交表單數據,這樣表單數據將不會干擾URL中的查詢字符串。使用POST方式時,數據是通過HTTP請求體發送的,而不是附加在URL上,如下圖所?示。

所以查詢字符串不建議使用GET方式提交表單,可以將查詢字符串作為表單數據。而采用POST方式不存在這個問題,不論使用哪種方式提交表單數據都是可以正確提交到后臺的,獲取查詢字符串也是使用$_GET獲取?的。對GET請求與查詢字符串的理解HTTP基礎PART02超文本傳送協議(HypertextTransferProtocol,HTTP)是Web數據傳輸的核心協議,支撐著各種Web應用程序和服務的數據交換。無論是簡單的HTML頁面請求,還是復雜的API(應用程序接口)數據交互,HTTP都在其中扮演著至關重要的角色。6.2HTTP基礎HTTP是Web應用程序的基礎,明確規定了客戶端與服務器之間的數據傳輸規則。客戶端通常是指用戶的Web瀏覽器,而服務器是存儲Web內容的計算機。

超文本傳輸安全協議(HypertextTransferProtocolSecure,HTTPS)則是一種通過計算機網絡進行安全通信的傳輸協議。它是在HTTP上建立的SSL/TLS(安全套接字層/傳輸層安全協議)加密層,并對傳輸數據進行加密,廣泛應用于需要保護用戶隱私和敏感信息的Web應用中,為用戶提供一個安全的網絡環?境。6.2.1HTTP/HTTPS簡介HTTP是一種基于“請求-響應”模式的協議。當客戶端與服務器建立連接后,客戶端(通常是瀏覽器)會向服務器發送一個請求,被稱作HTTP請求,服務器接收到請求后會做出響應,稱為HTTP響應。HTTP具有以下幾個關鍵特?性。(1)高效?性,客戶端只需發送簡單的請求,服務器便能迅速回應。(2)靈活?性,HTTP能傳輸各種類型的數據。(3)無連接?性,每個HTTP請求都是獨立的,請求結束后連接便斷開。(4)無狀態?性,HTTP不保存之前的通信狀態,每次請求都是全新的。6.2.1HTTP/HTTPS簡介在HTTP通信中,Headers是不可或缺的部分,它們包含關于請求或響應的附加信息。Headers主要由3部分組成:基本信息(General)、請求報文(RequestHeaders)和響應報文(ResponseHeaders)。以Chrome瀏覽器為例,在瀏覽器中打開目標網站(如人郵教育網站),按F12鍵啟動開發者工具,單擊Network選項卡,選擇Headers標簽頁。可以看到瀏覽器與Web服務器交互中傳遞的Headers信息。6.2.2HTTPHeaders的組成基本信息部分是HTTP請求或響應的基本概覽,它包含一系列關鍵的頭字段,這些字段為我們提供了有關網絡交互的基本數據。1.基本信息頭字段在HTTP通信中,基本信息包含一些通用的頭字段。6.2.3基本信息查看基本信息。在圖1所示界面中,單擊General,如圖2所示。其中,RequestMethod明確指出了HTTP的請求方式,比如這里使用了GET方式,從服務器獲取數據;StatusCode表示請求的處理狀態,例如,狀態碼200表示請求被成功處?理。6.2.3基本信息圖2圖12.常見的請求方式HTTP的請求方式有許多種,常見的請求方式如下表所?示。其中,GET和POST是常見的兩種請求方式。GET方式常用來從服務器獲取數據,發送請求時攜帶的參數會在URL中明文傳輸;POST方式常用來提交HTML表單數據,表單數據在請求正文中發送,用戶無法直接看到提交的具體內?容。6.2.3基本信息3.響應狀態碼詳解響應狀態碼由一個3位的十進制數表示,表示服務器處理客戶端請求的狀態,這些響應狀態碼被分為5個類別。(1)1xx:信息性狀態碼,表示請求已被接收,正在處理?中。(2)2xx:成功狀態碼,表明請求已成功被服務器接收并處?理。(3)3xx:重定向狀態碼,表示需要進一步的操作才能完成請?求。(4)4xx:客戶端錯誤狀態碼,表示請求包含錯誤或無法完?成。(5)5xx:服務器錯誤狀態碼,表示服務器在處理請求時發生了錯?誤。6.2.3基本信息常見的響應狀態碼如下表所?示。6.2.3基本信息當用戶通過瀏覽器訪問網站時,瀏覽器會向服務器發送一個HTTP請求報文。請求報文通常包括請求行、請求頭、空行及可能的請求正文等。空行用來分隔請求頭和請求正文,不可缺少。

6.2.4請求報文查看請求報文。在下圖所示界面中,單擊RequestHeaders,勾選Raw。RequestHeaders部分,第1行是請求行,第2~21行是請求頭,請求頭以鍵值對的形式存在,每行一個鍵值對。此請求為GET方式請求,無請求正?文。6.2.4請求報文1.請求行請求行位于請求報文的第1行,用來說明瀏覽器是如何與服務器溝通的,包含3個部分:請求方式、請求的資源路徑和HTTP版本。示例代碼如?下。這里包括請求方式(GET)、請求資源路徑(/index.php)、HTTP版本(HTTP/1.1)。其中,請求資源路徑指URL中的域名后面的內容,用于指定服務器中特定資源的位置。2.請求頭請求頭位于請求行之后,能夠幫助服務器理解客戶端的需求和上下文,它包含關于請求的元數據,例如瀏覽器支持的數據類型、壓縮方法、語言和系統環境等。常見的請求頭字段如下表所?示。6.2.4請求報文GET/index.phpHTTP/1.16.2.4請求報文3.請求正文當用戶通過瀏覽器提交表單時,如果表單的method屬性設置為POST,則瀏覽器會將用戶在表單中填寫的數據以鍵值對的形式打包在請求正文中發送給服務器。每個鍵和值之間使用=分隔,鍵值對之間使用&分隔。6.2.4請求報文name1=value1&name2=value2&...以【案例實踐6-1】實現簡單的用戶登錄和驗證為例,通過瀏覽器的開發者工具來觀察和分析完整的HTTP請求報文。(1)設置表單以POST方式提交,運行并在瀏覽器中打開php文?件。在頁面的空白處右擊并選擇“檢查”功能,打開瀏覽器的開發者工具,選擇Network選項卡,并進一步選擇Headers標簽頁。(2)在表單中輸入“用戶名”和“密碼”,然后單擊“提交”按鈕。此時,開發者工具的Network選項卡中出現一個新的請求記錄。單擊這個記錄,就可以查看該請求的詳細信息。【案例實踐6-4】查看請求報文(3)在請求報文中,第1行是請求行,它顯示了請求方式為POST,提交地址是當前服務器下的6-1.php資源。從第2行開始是請求頭信息。(4)在發送請求正文時,客戶端會在請求頭中包含一個重要的字段,即Content-Type,表示請求正文的MIME類型。默認使用的MIME類型是application/x-www-form-urlencoded,表示表單數據以URL編碼的形式發送。而字段Content-Length,指定了請求正文的長度。【案例實踐6-4】查看請求報文(5)查看傳送的請求正文,它位于請求頭的下方。這個請求正文包含用戶在表單中輸入的數據,以鍵值對的形式進行編碼和傳輸。請求正文為username=admin&password=11111,它的長度即Content-Length的長度是29,其中username和password是表單中的字段名,admin和11111是用戶輸入的?值。【案例實踐6-4】查看請求報文服務器接收到客戶端發送的請求報文后,將處理后的數據返回給客戶端,這些數據被稱為響應報文。響應報文由響應行、響應頭、空行和響應正文組成。6.2.5響應報文查看響應報文,在下圖界面中,單擊ResponseHeaders。ResponseHeaders部分,第1行是響應行,第2~8行是響應頭,響應頭以鍵值對的形式存在,每行一個鍵值對,鍵和值之間用冒號分隔;采用GET請求方式,沒有響應正?文。6.2.5響應報文1.響應行響應行位于HTTP響應消息的第1行,用于告知客戶端本次響應的狀態,具體示例代碼如?下。HTTP/1.1是協議版本,200是響應狀態碼,OK是狀態的描述信息。2.響應頭響應頭位于響應行的后面,提供了關于響應的元數據,包括服務器信息、響應內容的信息、緩存策略等。響應頭字段有助于服務器更好地理解客戶端的需求和上下文,從而更有效地處理請求和響應。6.2.5響應報文HTTP/1.1200OK

6.2.5響應報文【能力進階】在某些特定的場景下,可能需要手動調整HTTP的頭信息。比如,想要實現頁面的跳轉、定義內容的編碼格式?等。在PHP的世界里,header()函數允許我們自定義HTTP響應頭,從而實現上述的高級功能。上述代碼,通過header()函數設置了網頁內容的編碼格式為UTF-8,以確保中文字符能夠正確顯示。又使用同樣的函數實現了一個頁面跳轉的功能:當瀏覽器接收到包含Location字段的響應頭時,它會自動將用戶重定向到login.php這個頁?面。自定義響應頭//設定網頁內容的編碼格式header('Content-Type:text/html;charset=UTF-8');//實現頁面的自動跳轉header('Location:login.php');3.響應正文當我們從網上獲取信息時,服務器會回應我們的請求,返回各種各樣的內容,這些內容稱為響應正文。內容的形式取決于我們所請求的資源類型,比如,請求查看網頁時收到HTML格式的內容,請求圖片時則收到圖像數?據。服務器為了讓瀏覽器知道內容類型,會發送一個Content-Type標識,這就像身份證,告訴瀏覽器如何處理信息。服務器返回的是一個網頁,Content-Type是text/html。6.2.5響應報文6.2.5響應報文text/html是一種MIME類型表示方式,表示

HTML

文檔。MIME類型是在互聯網上常用來標識內容的格式,寫法通常是“大類別/具體類型”,比如說,text/plain表示普通文本。常見的MIME類型如下表所?示。瀏覽器會根據MIME類型來決定如何處理內容。如果不知道如何處理,瀏覽器通常會選擇下?載。Cookie和Session技術PART03HTTP是無狀態協議,對于事務處理沒有記憶能力。當一個用戶在請求一個頁面后再請求另一個頁面時,HTTP無法告知這兩個請求來自同一個用戶,這就意味著需要有一種機制來跟蹤并記錄用戶在該網站所進行的活動,這就是會話技術。PHP中的Cookie和Session是目前常用的兩種會話技?術。6.3Cookie和Session技術1.Cookie簡介Cookie是網站用來在用戶瀏覽器中存儲少量信息的技術,這些信息用于標識和跟蹤用戶的行為。當用戶首次訪問網站時,服務器會發送一個包含特定信息的Cookie到用戶的瀏覽器。此后,每當用戶再次訪問該網站時,瀏覽器會自動將這個Cookie發送給服務器,使服務器能夠識別出用戶的身份或狀態。這種機制允許網站為用戶提供個性化的服務或保持用戶的會話狀?態。6.3.1Cookie技術2.Cookie的用途Cookie通常有以下幾個用?途。(1)在頁面之間傳遞數?據。(2)記錄用戶信?息。(3)提高瀏覽速?度。6.3.1Cookie技術3.Cookie的使用Cookie的使用主要包括創建Cookie、獲取Cookie和刪除Cookie。(1)創建Cookie在PHP中,使用setcookie()函數可以創建或修改Cookie,其基本語法格式如下。6.3.1Cookie技術boolsetcookie(string$name[,string$value=""[,int$expire=0[,string$path=""[,string$domain=""[,bool$secure=false[,bool$httponly=false]]]]]]);使用setcookie()函數創建一個名為name、值為zhanghua、有效期為1h的Cookie。其中,setcookie()函數的第1個參數表示Cookie的名稱,第2個參數表示Cookie的值,第3個參數表示Cookie的有效期。6.3.1Cookie技術<?phpsetcookie('name','zhanghua',time()+60*60);?>查看Cookie信息。服務器向瀏覽器發送Cookie,瀏覽器就會保存Cookie,并在下次請求時自動攜帶Cookie。這個過程對于用戶來說是不可見的,但開發者可以通過瀏覽器的開發者工具查看。在開發者工具中,切換到Network選項卡下的Headers標簽頁,查看HTTP響應消息。圖1中,設置Cookie時,響應頭信息中的Set-Cookie:name=zhanghua會保存在瀏覽器中,切換到Cookies標簽頁查看創建的Cookie,如圖2所?示。6.3.1Cookie技術圖2圖1(2)獲取Cookie在PHP中,任何從客戶端發送的Cookie數據都會被自動存入$_COOKIE超全局數組中。要獲取Cookie的值,可訪問數組$_COOKIE。6.3.1Cookie技術<?Php//獲取指定的Cookieecho$_COOKIE['name'];//獲取所有的Cookievardump($_COOKIE);?>(3)刪除CookieCookie的生命周期默認是隨瀏覽器關閉而失效的,如果希望在關閉瀏覽器前刪除Cookie文件,可以通過setcookie()函數的第3個參數將Cookie的過期時間設置為過去的時間。刪除Cookie時只需將setcookie()函數中的Cookie值設置為空,Cookie的過期時間設置為小于系統的當前時間即?可。6.3.1Cookie技術setcookie(name,"",time()-1)//立即過期(相當于刪除Cookie)【案例實踐6-5】實現用戶自動登錄實現用戶登錄系統,當用戶成功登錄后,使用Cookie來記錄用戶的登錄狀態,以實現自動登錄的功?能。(1)在用戶提交登錄表單后,驗證用戶名和密碼。如果驗證成功,創建一個包含用戶登錄信息的Cookie。login.php主要代碼如下。【案例實踐6-5】實現用戶自動登錄(2)在用戶訪問需要登錄才能訪問的頁面時,檢查是否存在相應的Cookie,protected.php主要代碼如下。【案例實踐6-5】實現用戶自動登錄(3)當用戶單擊“退出登錄”鏈接時,刪除相應的Cookie(logout.php)。【案例實踐6-5】實現用戶自動登錄啟動內置服務器,在瀏覽器中打開login.php文件,在登錄表單中輸入有效的用戶名和密碼后,單擊“登錄”按鈕。如果登錄成功,系統將創建并設置Cookie,并將用戶重定向至受保護的頁面。如果關閉瀏覽器,再次訪問protected.php文件,系統會自動登錄。但如果用戶在沒有登錄過的情況下(或者清除Cookie緩存后)直接訪問protected.php文件,系統會提示用戶進行登錄。當用戶在受保護頁面中單擊“退出登錄”鏈接時,系統將刪除與用戶登錄狀態相關的Cookie,并重定向用戶至登錄頁面或首頁。Session數據存儲在服務器端,通過客戶端的Cookie來傳遞會話標識(SessionID),從而實現跨頁面識別用戶會話的功?能。1.Session簡介Session在計算機和網絡應用中,通常被稱為會話。在PHP中,Session基于服務器端存儲,它使用Cookie中的SessionID來識別用戶,并在服務器中創建一個與該用戶相關聯的會話數據文件。當用戶首次訪問網站時,PHP會生成一個唯一的SessionID,并通過Cookie將其發送給用戶瀏覽器。在后續的請求中,瀏覽器會攜帶這個SessionID,使得服務器能夠識別用戶并恢復與該用戶相關的會話數?據。6.3.2Session技術Session文件保存在服務器中,每一個Session文件都具有唯一的SessionID,用于標識不同的用戶。SessionID分別保存在客戶端和服務器端,客戶端通過Cookie保存,服務器端則以文件的形式保存,Session文件的保存路徑為php.ini中session.save_path配置項指定的目錄,在Windows系統中默認保存到C:\Windows\Temp目錄?下。6.3.2Session技術2.Session的使用Session的使用包括啟動Session、注冊Session變量、使用Session變量、刪除和銷毀Session。(1)啟動Session使用Session之前,需要先啟動Session。使用session_start()函數啟動Session。session_start()函數會檢查是否存在當前會話,如果不存在則創建一個新會話,如果已經存在一個會話,函數會直接使用這個會話,加載已經注冊過的會話變量,然后使?用。6.3.2Session技術boolsession_start(void)(2)注冊Session變量啟動Session后,可以使用超全局變量數組$_SESSION實現Session數據的添加、獲取、刪除等操作。例如,啟動Session,并創建Session變量來保存相關信息。6.3.2Session技術session_start(); //啟動Session$_SESSION['username']='zhanghua'; //向Session添加變量username,值為zhanghua$_SESSION['password']='123456'; //向Session添加變量password,值為123456(3)使用Session變量在訪問$_SESSION數組時,要先使用isset()函數或empty()函數來確定會話變量是否為空。例如,判斷Session中是否存在username變量,如果存在則讀取該變量值。6.3.2Session技術if(isset($_SESSION['username'])){$username=$_SESSION['username'];}(4)刪除和銷毀SessionPHP提供了session_unset()函數和session_destroy()函數,用于刪除和銷毀Session。session_unset()函數用于刪除當前內存中$_SESSION數組中的所有元素,并刪除Session文件中的用戶信息,并不刪除Session文件以及不釋放對應的SessionID。session_unset()函數等效于$_SESSION=array()。使用session_destroy()函數可以銷毀Session文件,并將SessionID置為0。銷毀成功后函數返回true,否則返回false。6.3.2Session技術voidsession_unset(void)boolsession_destroy(void)【案例實踐6-6】通過Session驗證登錄信息使用PHP的Session機制來實現這一功能。Session允許我們在服務器端存儲用戶的狀態信息,并通過Cookie在客戶端與服務器之間傳遞會話標?識。(1)設置Session變量并模擬用戶登錄(set.php)。【案例實踐6-6】通過Session驗證登錄信息(2)檢查Session變量,并顯示相應的歡迎信息或登錄提示(check.php)。【案例實踐6-6】通過Session驗證登錄信息(3)銷毀Session,實現用戶退出登錄(destroy.php)。【案例實踐6-6】通過Session驗證登錄信息啟動內置服務器,在瀏覽器中打開set.php文?件,然后跳轉到check.php文件。【案例實踐6-6】通過Session驗證登錄信息check.php同步獲取SessionID后,可以在開發者工具中查看瀏覽器中保存的SessionID,可以通過如下兩種方式查看SessionID。在D:\phpstudy_pro\Extensions\tmp\tmp(見下圖)目錄下,服務器存儲了名為“sess_SessionID”的Session文件。這個文件的SessionID與瀏覽器Cookie中顯示的完全相符,這確保了文件的專屬性,即只有持有此特定SessionID的用戶才有權訪問相應文?件。【案例實踐6-6】通過Session驗證登錄信息當用戶選擇“退出登錄”鏈接時,系統會跳轉到destroy.php文件并執行Session的銷毀操作。在Web開發中,Cookie和Session是兩種常用的技術,用于在客戶端和服務器之間保持狀態信息。可以將Cookie比作商家發給顧客的一張會員卡,顧客需要隨身攜帶(存儲在瀏覽器中),每次購物時出示以享受會員優惠;而Session像商家內部的客戶檔案管理系統,顧客無須攜帶任何物品,只需報出自己的會員號(SessionID),商家即可通過系統查找到該顧客的詳細信?息。6.3.3Cookie和Session的區別在數字化時代,前后端數據交互的安全性至關重要。作為PHP開發者,在實現功能的同時,必須時刻關注用戶數據的保護和隱私安全。使用HTTPS加密數據傳輸、對存儲在服務器中的用戶數據進行加密處理、合理使用Cookie和Session技術等措施,都是保護用戶數據的重要手段。通過提高前后端數據交互的安全性,可以為用戶提供更優質的服務,同時也為企業的長期發展奠定堅實基?礎。PHP中的前后端數據交互與用戶隱私保護正則表達式PART04在項目開發中,經常需要對表單中文本框的輸入內容進行格式限制,例如手機號、身份證號的驗證,這些內容遵循的規則繁多而又復雜,如果成功匹配,可能需要上百行代碼,這種做法顯然不可取。需要使用正則表達式,利用簡短的描述語法完成諸如查找、匹配、替換等功?能。6.4正則表達式正則表達式(RegularExpression)是一種強大的字符串處理工具,它由普通字符(如字符a到z)以及具有特殊含義的字符(稱為元字符)組成。利用這些字符,正則表達式能夠在文本中查找和匹配符合特定模式的字符串。正則表達式在發展過程中出現了多種語法形式,一種是POSIX(PorableOperatingSystemInterface,可移植操作系統接口)兼容的正則表達式,它包括BRE(BasicRegularExpression,基本正則表達式)語法和ERE(ExtendedRegularExpression,擴展正則表達式)語法,用于確保操作系統之間的可移植性。另一種是隨Perl語言發展而衍生出來的PCRE(PerlCompatibleRegularExpressions,Perl兼容正則表達式)語法。6.4.1正則表達式簡介在PHP的PCRE語法中,一個完整的正則表達式由模式、定界符和模式修飾符組成,語法格式如下。

說明如?下。模式:表示具體字符串匹配規則。比如,a這個模式就是直接用來匹配字母a的,我們稱之為原義文本字符。但正則表達式還包含一些特殊字符,稱為元字符,元字符具有特殊的含義,比如.可以匹配除換行符之外的任何單個字?符。定界符(/.../):標識正則表達式的開始和結束。通常用/作為定界符。模式修飾符:用于進一步對正則表達式進行設置。比如,修飾符i可以讓正則表達式在匹配時不區分大小?寫。6.4.2正則表達式的組成/模式/模式修飾符正則表達式就像一個超級搜索器,能幫助我們從文本中找到符合特定規則的字符串。1.直接匹配文本原義文本字符就是那些直接匹配自身字符的字符,比如大小寫字母、數字、標點符號等。在正則表達式中,這些字符通常按照字面意義進行匹?配。只包含原義文本字符的正則表達式可以說是最簡單的正則表達式,即直接匹配字符串中特定的字符或字符序列。例如,要匹配字符串"hello",表達式如下。6.4.3正則表達式的用法"/hello/"2.使用元字符進行高級匹配元字符指正則表達式中具有特殊含義的字符,它們有著特定的功能,可以用來定義搜索模式,或者控制匹配的次數和范圍,幾種元字符的具體說明如?下。(1)常見元字符6.4.3正則表達式的用法(2)匹配次數的元字符關于匹配次數的元字符,可參考下表。如果要匹配連續出現3次及以上的數字,其正則表達式代碼如下。6.4.3正則表達式的用法'/\d{3,}/'(3)位置錨定元字符下表所示為位置錨定元字符。

如果要匹配11位手機號,通常手機號碼以1開頭,第二位的數字有3、4、5、6、7、8等,后面跟著9個數字,正則表達式代碼如下。如果要匹配用戶名,用戶名僅由字母、數字和下畫線等組成,長度為4到16個字?符。6.4.3正則表達式的用法'/^1[345678]\d{9}$/''/^[a-zA-Z0-9_]{4,16}$/'(4)分支、分組與引用元字符有關分支、分組和引用的元字符,見下表。

以匹配單詞

red、green或blue為例,其正則表達式代碼如。6.4.3正則表達式的用法'/\b(red|green|blue)\b/'(5)特殊序列元字符在PHP中,特殊序列元字符通常指的是那些在雙引號字符串中具有特殊含義的字符序列,常見的特殊序列元字符如下表所示。

6.4.3正則表達式的用法3.使用模式修飾符調整匹配行為模式修飾符是標記在整個正則表達式之外的,可以看作對正則表達式的一些補充說明。常用的模式修飾符如下表所?示。在實際應用中,可以將多個模式修飾符組合在一起使用,在編寫多個模式修飾符時沒有順序要求。6.4.3正則表達式的用法1.正則匹配正則匹配是指根據正則表達式來查找和匹配字符串中的特定內容。PHP提供了幾個函數來實現這一功能,包括preg_match()、preg_match_all()和preg_grep()等函?數。(1)preg_match()函數preg_match()函數用于進行正則表達式匹配,成功則返回1,否則返回0。參數說明:$pattern:規定正則表達?式。$subject:表示需要匹配的對?象。$matches:設置存儲匹配結果的數組,$matches[0]表示包含與整個模式匹配的文本,$matches[1]表示包含與第一個捕獲的括號中的子模式匹配的文本,以此類?推。6.4.4正則表達式在PHP中的應用intpreg_match(string$pattern,string$subject[,array$matches])要檢查一個字符串是否是有效手機號,代碼如下。6.4.4正則表達式在PHP中的應用functionisValidPhoneNum($phoneNumber){

$pattern='/^1[345678]\d{9}$/';//匹配11位手機號的正則表達式

returnpreg_match($pattern,$phoneNumber);

}var_dump(isValidPhoneNum('186****3359'));//輸出int(1),表示匹配成功var_dump(isValidPhoneNum('121****2568'));//輸出int(0),表示匹配失敗(2)preg_match_all()函數preg_match_all()函數用于進行正則表達式全局匹配,成功則返回整個模式匹配的次數(可能為0),如果出錯則返回false。具體參數說明如?下。$pattern:規定正則表達?式。$subject:表示需要匹配的對?象。$matches:設置存儲匹配結果的數?組。$flags:指定匹配結果放入$matches中的順?序。6.4.4正則表達式在PHP中的應用intpreg_match_all(string$pattern,string$subject,array$matches[,int$flags])要在一個句子中找到顏色單詞red、green或blue。在上面的代碼中,$matches[0]數組包含所有匹配到的單詞,這正是我們想要的結果。通過這個例子,我們可以看到preg_match_all()函數的強大和靈活性,它能幫助我們輕松地處理復雜的文本搜索問?題。6.4.4正則表達式在PHP中的應用$pattern='/\b(red|green|blue)\b/';//定義我們要查找的模式//這是我們要搜索的文本$string='Theappleisred,theleafisgreen,andtheskyisblue.';preg_match_all($pattern,$string,$matches);//使用preg_match_all()函數進行搜索print_r($matches[0]);//輸出Array([0]=>red[1]=>green[2]=>blue)(3)preg_grep()函數當需要對多個字符串進行匹配時,可以將這些字符串放到數組中,然后使用preg_grep()函數對數組進行匹配。參數說明:$pattern:規定正則表達?式。$input:表示指定的數?組。$flags:默認值為0,表示沒有附加選項;如果設置為常量PREC_GREP_INVERT,則表示返回指定數組中與指定正則表達式不匹配的元素所組成的數組。6.4.4正則表達式在PHP中的應用arraypreg_grep(string$pattern,array$input[,int$flags=0])有一個包含各種字符串的數組,想要從中過濾出所有的數字字符串,代碼如下。從$numbers數組的輸出結果可以看出,匹配結果會保留原數組中的索引值。若將preg_grep()函數的第3個參數設為PREC_GREP_INVERT,則會輸入不符合正則表達式匹配規則的元?素。6.4.4正則表達式在PHP中的應用$array=array('apple','123','banana','456','cherry','789');$pattern='/^\d+$/';//匹配整個字符串為數字的規則$numbers=preg_grep($pattern,$array);print_r($numbers);//輸出所有數字字符串2.正則替換正則替換是指根據正則表達式匹配內容并替換,PHP中的preg_replace()函數就是為此設計的。參數說明:$pattern:規定正則表達?式。$replacement:表示替換的內?容。$subject:設置需要替換的對?象。$limit:指定替換的個數,如果省略limit或者其值為-1,則所有的匹配項都會被替?換。6.4.4正則表達式在PHP中的應用mixedpreg_replace(mixed$pattern,mixed$replacement,mixed$subject[,int$limit])將字符串''Hello,world!''中的world替換為PHP。6.4.4正則表達式在PHP中的應用$str="Hello,world!";$pattern='/world/';

//要查找并替換的單詞

$replace='PHP';

//替換成的單詞$newStr=preg_replace($pattern,$replace,$str);print_r($newStr);

//輸出Hello,PHP!3.正則分割正則分割是指根據正則表達式分割字符串,在PHP中,我們可以使用preg_split()函數來實現這個功能。參數說明:$pattern:規定正則表達?式。$subject:表示需要分割的對?象。$limit:如果指定了limit,則最多返回limit個子字符?串。$flags:設定limit為-1后可?選。6.4.4正則表達式在PHP中的應用arraypreg_split(string$pattern,string$subject[,int$limit[,int$flags]])根據逗號來分割字符串

''apple,banana,orange''。6.4.4正則表達式在PHP中的應用$str="apple,banana,orange";$keywords=preg_split('/,/',$str);print_r($keywords);

//輸出Array([0]=>apple[1]=>banana[2]=>orange)本案例通過正則表達式實現從指定字符串中查找和提取電子郵件地?址。(1)構建正則表達式。電子郵件地址通常由用戶名、@符號和域名組成。需考慮用戶名和域名部分的字符規則。用戶名部分通常包含字母、數字、點號和其他特殊字符等。\b是一個單詞邊界符,確保我們匹配的是完整的單詞(即電子郵件地址)。[A-Za-z0-9._%+-]+匹配一個或多個字母、數字、點號、下畫線、百分號、加號或減號等。這些字符是電子郵件地址用戶名部分中常見的合法字?符。【案例實踐6-7】提取電子郵

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論