日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

【CyberSecurityLearning 48】PHP Cookie 和 SESSION

發布時間:2025/3/15 php 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【CyberSecurityLearning 48】PHP Cookie 和 SESSION 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

會話控制

設置cookie的語句:setcookie();

setcookie的屬性(性質):

?

服務器怎么接收cookie信息

session機制

session_start

$_SESSION? 完成對session數據的讀寫

源碼

使用Cookie實現對用戶登錄的驗證

index.php

login.php

logout.php

Cookie存在的風險實驗(cookie被竊取)

1.php(開啟session機制)

2.php()

使用session機制實現用戶登入驗證

index.php

login.php

logout.php

session安全性實驗


?

會話控制

瀏覽網頁的時候,使用的是HTTP協議。
客戶端發出請求
服務端給出響應

cookie就是“身份證”

存儲在客戶端的一段文本,文件|字符串(大多數情況下,字符串)

服務器發給客戶端(cookie存儲在客戶端)

每次客戶端瀏覽器 在發出請求的時候,自動都會攜帶Cookie信息

cookie信息也是鍵值對的形式

cookie信息是從服務器端向客戶端寫入的

設置cookie的語句:setcookie();

<?php setcookie("name","GGG"); //setcookie就是PHP中設置cookie的一個語句,服務器端向客戶端寫入 ?>

setcookie返回的是一個布爾類型的值!

setcookie的屬性(性質):

name??????? Cookie的名稱

value??????? Cookie的值

expire??? ?? 過期時間(終止; 到期)

path?????? ?? Cookie的有效路徑

domain???? Cookie的域名

secure????? https(如果不是https,cookie就用不了)

httponly??? 僅僅通過http 協議訪問,不能通過JS訪問

瀏覽器cookie信息在哪里看?F12--存儲

服務器端向客戶端寫入cookie(身份證)的過程:
瀏覽器在訪問頁面是時候會自動攜帶cookie信息

1.php代碼:

<?php setcookie("name","AJEST",null,null,null,null,null); // setcookie有七個參數 //過期時間寫null就是瀏覽器關閉的時候到期 //路徑寫null就是默認 //null就是默認,不寫就用默認選項 /* name Cookie的名稱 value Cookie的值 expire 過期時間(終止; 到期) path Cookie的有效路徑 domain Cookie的域名 secure https(如果不是https,cookie就用不了) httponly 僅僅通過http 協議訪問,不能通過JS訪問 */?>

?

服務器怎么接收cookie信息

$_COOKIE

2.PHP代碼:

<?php var_dump($_COOKIE); ?>

通過這個過程就完成了下發身份證再上傳身份證的過程:
下發是通過setcookie()下發cookie
我們怎么提供身份證信息?(每次客戶端瀏覽器 在發出請求的時候,自動都會攜帶Cookie信息)

竊取和欺騙
竊取是被竊取,就是你身份證丟了(身份證是放在客戶端)
欺騙就是攻擊者欺騙服務器

實際上身份證放在我們瀏覽器端是不安全的,所以我們可以考慮把身份證放在服務器端
如果我們把身份證放在服務器端,這種機制叫Session機制

session機制

session會把我們的身份證放在服務器端,但是session機制要依賴cookie實現,說明我們cookie是存放在瀏覽器端的一個文本,session也就是我們用戶信息是存在服務器端的,但是我們session要依賴cookie來實現,我們session有個屬性叫session id,這個session id也是發給瀏覽器的。
session id也有竊取和欺騙的風險,但是我們身份證放在服務器端,比放在瀏覽器端更安全!

session_start

session的實現我們需要session_start

<?php session_start();//開啟session機制 ?>

再打開一個瀏覽器localhost/1.php,會發現這兩個瀏覽器的session id不一樣,意味著通過這個session id就可以區分不同的用戶
session是放在服務器端的,那他到底放在服務器端的哪個位置呢?放在哪個緩存下

$_SESSION? 完成對session數據的讀寫

?


源碼

使用Cookie實現對用戶登錄的驗證

index.php

<meta charset="utf-8"> <h1>剎那芳華論壇</h1><?php if(isset($_COOKIE['name'])){echo "歡迎您,{$_COOKIE['name']} <a href='./logout.php'>注銷</a>"; }else{echo "<a href='./login.php'>請登錄</a>"; } ?>

login.php

<meta charset="utf-8"> <?php if(isset($_POST['userSubmit'])){if(isset($_POST['userName']) && $_POST['userName']=="AJEST"&& isset($_POST['userPass']) && $_POST['userPass']=="123456"){if(setcookie("name","AJEST")){echo "登錄成功,<a href='./index.php'>返回首頁</a>";}else{echo "設置cookie錯誤";}}else{echo "用戶名或密碼錯誤<a href='./login.php'>請重新登錄</a>";} }else{ $htm=<<<HTML <formaction="" method="post" > 用戶名:<input type="text" name="userName"><br/> 密碼:<input type="password" name="userPass"><br/> <input type="submit" name="userSubmit" value="登錄"><br/> </form> HTML;echo $htm; }?>

logout.php

<meta charset="utf-8"> <?php setcookie("name",$_COOKIE['name'],time()-3600); //time()是當前時間 echo "已注銷,<a href='./index.php'>返回首頁</a>"; ?>

進入首頁(index.php)

登錄(login.php)

注銷(logout.php)


Cookie存在的風險實驗(cookie被竊取)

竊取Cookie,直接登入

在一個瀏覽器上登入

打開另外一個瀏覽器的localhost頁面,看到屬于未登錄狀態,但是由于我們知道了cookie信息竊取了

我們打開console面板,寫如cookie信息

document.cookie=("name=AJEST")

再刷新一下頁面,就可以直接登錄

現在,我們將第一個瀏覽器的頁面注銷,cookie信息被清空

但在另一個瀏覽器上沒有收到任何影響


1.php(開啟session機制)

<?phpsession_start();//開啟session 機制$_SESSION['name']="GGG";$_SESSION['age']=24;?>

會在服務器端生成一個文件:

相比之下session要相對安全

2.php()

<?phpsession_start();var_dump($_SESSION);?> 我們只要在頁面中開啟了session_start 2.php就會根據我們客戶端傳過來的session id去找我們對應的緩存 如果緩存有值,$_SESSION就會獲取存儲在服務器端的session的這些變量

打開服務器端的session文件,會看到里面存放了我們前面設置的信息


使用session機制實現用戶登入驗證

index.php

<?php session_start();//session_start()要寫在最前面,前面不能有任何輸出 ?> <meta charset="utf-8"> <h1>剎那芳華論壇</h1> <?php if(isset($_SESSION['userName']) && $_SESSION['userName'] =="GGG") {echo "歡迎您,{$_SESSION['userName']} <a href='./logout.php'>注銷</a>"; } else {echo "<a href='./login.php'>請登錄</a>"; } ?>

login.php

<?php session_start(); echo "<meta charset='utf-8'>"; ?> <?php if(isset($_POST['userSubmit'])){if(isset($_POST['userName']) &&isset($_POST['userPass']) &&$_POST['userName'] == "GGG" &&$_POST['userPass'] == "123456"){$_SESSION['userName'] = $_POST['userName'];echo "登錄成功,<a href='./index.php'>返回首頁</a>";}else{echo "用戶或密碼錯誤,<a href='./login.php'>請重新登錄</a>";}}else{$html=<<<HTML <formaction=""method="post" > 用戶名:<input type="text" name="userName"><br /> 密碼:<input type="password" name="userPass"><br /> <input type="submit" name="userSubmit" value="登錄"> </form> HTML;echo $html; } ?>

logout.php

<?php session_start(); session_destroy();//session的注銷函數 echo "<meta charset='utf-8'>已注銷,<a href='./index.php'>返回首頁</a>"; ?>

在服務器端,生成一個與session值相對應的文件,文件為空

登錄成功

再來看我們服務器端的session文件,存入了登錄驗證信息

返回首頁

注銷

與之對應的在服務器端,session文件被清空刪除


session安全性實驗

通樣我們在另一個瀏覽器上打開,利用session值登入測試

服務器端與之對應的session值文件中存入信息

打開另外一個瀏覽器,生成新的sess值

替換前面的sess值

刷新:直接就進去了

當我們在第一個瀏覽器上注銷之后

在另一個瀏覽器上使用前面的session值就會失效

因為服務器端與之對應的session文件內容已被清空,整個sessiom值失效了

因此,我們日常生活中也應該要重視注銷這一環節,隨手注銷是個好習慣!

?

總結

以上是生活随笔為你收集整理的【CyberSecurityLearning 48】PHP Cookie 和 SESSION的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。