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

本文是根據慕課網Jason老師的課程進行的PHP面試知識點總結和昇華,若有侵權請聯繫我進行刪除,email:guoyugygy@163.com

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

回顧真題

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

答案:web

COOKIE:面試

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

SESSION:數組

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

cookie和session結合使用:安全

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

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

二、將session數據加密,而後存儲在cookie中。這種專業術語叫作client side session。flask採用的就是這種方式,可是也能夠替換成其餘形式。session

考點分析

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
相關文章
相關標籤/搜索