PHP 菜鳥教程

PHP 高級教程

PHP & MySQL

PHP 參考手冊

PHP Session

在本教程中,您將學(xué)習(xí)如何使用PHP會(huì)話將某些數(shù)據(jù)臨時(shí)存儲(chǔ)在服務(wù)器上。

什么是Session

盡管您可以使用Cookie存儲(chǔ)數(shù)據(jù),但是它存在一些安全問題。 由于cookie存儲(chǔ)在用戶計(jì)算機(jī)上,因此攻擊者可以輕松地修改cookie內(nèi)容,以在您的應(yīng)用程序中插入可能有害的數(shù)據(jù),從而可能破壞您的應(yīng)用程序。

此外,每次瀏覽器向服務(wù)器請求URL時(shí),網(wǎng)站的所有cookie數(shù)據(jù)都會(huì)在請求中自動(dòng)發(fā)送到服務(wù)器。 這意味著如果您在用戶系統(tǒng)上存儲(chǔ)了5個(gè)Cookie,每個(gè)Cookie的大小為4KB,則瀏覽器需要在用戶每次查看頁面時(shí)上傳20KB的數(shù)據(jù),這可能會(huì)影響您站點(diǎn)的性能。

您可以通過使用PHP session來解決這兩個(gè)問題。 PHP session將數(shù)據(jù)存儲(chǔ)在服務(wù)器而不是用戶的計(jì)算機(jī)上。 在基于會(huì)話的環(huán)境中,每個(gè)用戶都是通過稱為會(huì)話標(biāo)識(shí)符或SID的唯一編號(hào)來標(biāo)識(shí)的。 此唯一的會(huì)話ID用于將每個(gè)用戶與自己在服務(wù)器上的信息(例如電子郵件,帖子等)鏈接起來。

提示:session ID是由PHP引擎隨機(jī)生成的,幾乎無法猜測。此外,由于會(huì)話數(shù)據(jù)存儲(chǔ)在服務(wù)器上,因此不必隨每個(gè)瀏覽器請求一起發(fā)送。

開始 Session

在將任何信息存儲(chǔ)在會(huì)話變量中之前,必須首先啟動(dòng)Session。要開始新的Session,只需調(diào)用PHP session_start()函數(shù)。它將創(chuàng)建一個(gè)新會(huì)話并為用戶生成一個(gè)唯一的Session ID。

下面示例中的PHP代碼只是開始一個(gè)新Session。

<?php
//開始 session
session_start();
?>

session_start()函數(shù)首先通過查找會(huì)話ID的存在來檢查會(huì)話是否已經(jīng)存在。如果找到一個(gè)會(huì)話,即會(huì)話已經(jīng)啟動(dòng),則設(shè)置會(huì)話變量,如果沒有,則通過創(chuàng)建新的會(huì)話ID來啟動(dòng)新會(huì)話。

注意:您必須session_start()在頁面的開頭(即在瀏覽器中腳本生成的任何輸出之前)調(diào)用該函數(shù),就像在使用setcookie()函數(shù)設(shè)置cookie時(shí)一樣。

存儲(chǔ)和訪問Session數(shù)據(jù)

您可以將所有會(huì)話數(shù)據(jù)作為鍵值對存儲(chǔ)在$_SESSION[]超全局?jǐn)?shù)組中??梢栽跁?huì)話的生存期內(nèi)訪問存儲(chǔ)的數(shù)據(jù)??匆韵履_本,該腳本創(chuàng)建一個(gè)新會(huì)話并注冊兩個(gè)會(huì)話變量。

<?php
//正在啟動(dòng)會(huì)話
session_start();
 
//存儲(chǔ)會(huì)話數(shù)據(jù)
$_SESSION["firstname"] = "Peter";
$_SESSION["lastname"] = "Parker";
?>

要訪問我們在上一個(gè)示例中從同一Web域的任何其他頁面上設(shè)置的會(huì)話數(shù)據(jù),只需調(diào)用session_start()即可重新創(chuàng)建會(huì)話,然后將相應(yīng)的鍵傳遞給$_SESSION關(guān)聯(lián)數(shù)組。

<?php
//正在啟動(dòng)會(huì)話
session_start();
 
//訪問會(huì)話數(shù)據(jù)
echo 'Hi, ' . $_SESSION["firstname"] . ' ' . $_SESSION["lastname"];
?>

上面示例中的PHP代碼產(chǎn)生以下輸出。

Hi, Peter Parker

注意:要訪問同一頁面中的會(huì)話數(shù)據(jù),無需重新創(chuàng)建會(huì)話,因?yàn)樗言陧撁骓敳繂?dòng)。

銷毀 Session

如果要?jiǎng)h除某些會(huì)話數(shù)據(jù),只需取消設(shè)置$_SESSION關(guān)聯(lián)數(shù)組的相應(yīng)鍵,如以下示例所示:

<?php
//啟動(dòng)會(huì)話
session_start();
 
//正在刪除會(huì)話數(shù)據(jù)
if(isset($_SESSION["lastname"])){
    unset($_SESSION["lastname"]);
}
?>

但是,要完全銷毀會(huì)話,只需調(diào)用session_destroy()函數(shù)。該函數(shù)不需要任何參數(shù),一次調(diào)用會(huì)銷毀所有會(huì)話數(shù)據(jù)。

<?php
//啟動(dòng)會(huì)話
session_start();
 
//銷毀會(huì)話
session_destroy();
?>

注意:在使用session_destroy()函數(shù)銷毀會(huì)話之前,如果會(huì)話環(huán)境尚未存在,則需要先使用session_start()函數(shù)重新創(chuàng)建該會(huì)話環(huán)境,以便進(jìn)行銷毀。

每個(gè)PHP會(huì)話都有一個(gè)超時(shí)值(持續(xù)時(shí)間,以秒為單位),該值確定在沒有任何用戶活動(dòng)的情況下會(huì)話應(yīng)保持活動(dòng)狀態(tài)的時(shí)間。 您可以通過更改PHP配置文件(php.ini)中session.gc_maxlifetime變量的值來調(diào)整此超時(shí)時(shí)間。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清