本文是根據慕課網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