php面試筆記(8)-php基礎知識-會話控制考點

本文是根據慕課網Jason老師的課程進行的PHP面試知識點總結和昇華,如有侵權請聯繫我進行刪除,email:[email protected]

在上一篇中,冷月爲大家分享了文件及目錄處理考點,大家一定要根據自己的薄弱點進行查漏補缺,嘗試着練習目錄的複製和刪除函數的編寫。今天,冷月爲大家分享會話控制考點。

回顧真題

簡述cookie和session的區別及各自的工作機制,存儲位置等。簡述cookie的優缺點。

答案:

COOKIE:

在網站中,http請求是無狀態的。也就是說即使第一次和服務器連接後並且登錄成功後,第二次請求服務器依然不能知道當前請求是哪個用戶。cookie的出現就是爲了解決這個問題,第一次登錄後服務器返回一些數據(cookie)給瀏覽器,然後瀏覽器保存在本地,當該用戶發送第二次請求的時候,就會自動的把上次請求存儲的cookie數據自動的攜帶給服務器,服務器通過瀏覽器攜帶的數據就能判斷當前用戶是哪個了。cookie存儲的數據量有限,不同的瀏覽器有不同的存儲大小,但一般不超過4KB。因此使用cookie只能存儲一些小量的數據。

SESSION:

session和cookie的作用有點類似,都是爲了存儲用戶相關的信息。不同的是,cookie是存儲在本地瀏覽器,而session存儲在服務器。存儲在服務器的數據會更加的安全,不容易被竊取。但存儲在服務器也有一定的弊端,就是會佔用服務器的資源,但現在服務器已經發展至今,一些session信息還是綽綽有餘的。

cookie和session結合使用:

web開發發展至今,cookie和session的使用已經出現了一些非常成熟的方案。在如今的市場或者企業裏,一般有兩種存儲方式:

1、存儲在服務端:通過cookie存儲一個session_id,然後具體的數據則是保存在session中。如果用戶已經登錄,則服務器會在cookie中保存一個session_id,下次再次請求的時候,會把該session_id攜帶上來,服務器根據session_id在session庫中獲取用戶的session數據。就能知道該用戶到底是誰,以及之前保存的一些狀態信息。這種專業術語叫做server side session。

2、將session數據加密,然後存儲在cookie中。這種專業術語叫做client side session。flask採用的就是這種方式,但是也可以替換成其他形式。

考點分析

PHP的會話控制技術

COOKIE:

cookie 常用於識別用戶。cookie 是一種服務器留在用戶計算機上的小文件。每當同一臺計算機通過瀏覽器請求頁面時,這臺計算機將會發送 cookie。通過 PHP,您能夠創建並取回 cookie 的值。

操作

創建cookie

setcookie(name, value, expire, path, domain);

<?php
setcookie("user", "runoob", time()+3600);
?>

讀取cookie

PHP 的 $_COOKIE 變量用於取回 cookie 的值。

<?php
// 輸出 cookie 值
echo $_COOKIE["user"];

// 查看所有 cookie
print_r($_COOKIE);
?>

刪除cookie

當刪除 cookie 時,您應當使過期日期變更爲過去的時間點。

<?php
// 設置 cookie 過期時間爲過去 1 小時
setcookie("user", "", time()-3600);
?>

Session:
PHP session 變量用於存儲關於用戶會話(session)的信息,或者更改用戶會話(session)的設置。Session 變量存儲單一用戶的信息,並且對於應用程序中的所有頁面都是可用的。

操作
在您把用戶信息存儲到 PHP session 中之前,首先必須啓動會話。

session_start() 函數

<?php session_start(); ?>

存儲 Session 變量

存儲和取回 session 變量的正確方法是使用 PHP $_SESSION 變量:

<?php
session_start();
// 存儲 session 數據
$_SESSION['views']=1;
?>

銷燬 Session

如果您希望刪除某些 session 數據,可以使用 unset() 或 session_destroy() 函數。unset() 函數用於釋放指定的 session 變量:

<?php
session_start();
if(isset($_SESSION['views']))
{
    unset($_SESSION['views']);
}
?>

配置Session

session.auto_start

php.ini配置session.auto_start=0默認關閉,session.auto_start 開啓就自動完成了session_start()。

session.cookie.lifetime

session.cookie.lifetime 默認是0,即瀏覽器關閉,session失效;修改這個值的作用是修改sessionid以cookie的形式保留在瀏覽器的時間長度,也就是說這個值設置一個小時,名爲sessionid的cookie就保留在瀏覽器一個小時,session一個小時後才過期;

垃圾回收

session.gc_maxlifetime; 設置過期session時間,默認1440秒(24分鐘)

session.gc_probability/session.gc_divisor; 啓動垃圾回收機制的概率(建議值爲1/1000——5000)

session_id()

session_id — 獲取/設置當前會話 ID

session_name()

session_name — 讀取/設置會話名稱

一網打盡

session信息的存儲方式、如何遍歷session

答案:session是一種服務端機制,服務器使用一種類似於散列表的結構來保存信息,在PHP中直接用$_SESSION數組來遍歷即可

如果這篇博文有幫助到您,可以幫冷月點一個贊或者加一個關注哦!

歡迎關注我的公衆號:學長冷月,獲得獨家整理的學習資源和日常乾貨推送。
如果您對我的專題內容感興趣,也可以關注我的博客:guoyu7.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章