在本教程中,您將學(xué)習(xí)如何使用PHP會話將某些數(shù)據(jù)臨時存儲在服務(wù)器上。
盡管您可以使用Cookie存儲數(shù)據(jù),但是它存在一些安全問題。 由于cookie存儲在用戶計算機上,因此攻擊者可以輕松地修改cookie內(nèi)容,以在您的應(yīng)用程序中插入可能有害的數(shù)據(jù),從而可能破壞您的應(yīng)用程序。
此外,每次瀏覽器向服務(wù)器請求URL時,網(wǎng)站的所有cookie數(shù)據(jù)都會在請求中自動發(fā)送到服務(wù)器。 這意味著如果您在用戶系統(tǒng)上存儲了5個Cookie,每個Cookie的大小為4KB,則瀏覽器需要在用戶每次查看頁面時上傳20KB的數(shù)據(jù),這可能會影響您站點的性能。
您可以通過使用PHP session來解決這兩個問題。 PHP session將數(shù)據(jù)存儲在服務(wù)器而不是用戶的計算機上。 在基于會話的環(huán)境中,每個用戶都是通過稱為會話標識符或SID的唯一編號來標識的。 此唯一的會話ID用于將每個用戶與自己在服務(wù)器上的信息(例如電子郵件,帖子等)鏈接起來。
提示:session ID是由PHP引擎隨機生成的,幾乎無法猜測。此外,由于會話數(shù)據(jù)存儲在服務(wù)器上,因此不必隨每個瀏覽器請求一起發(fā)送。
在將任何信息存儲在會話變量中之前,必須首先啟動Session。要開始新的Session,只需調(diào)用PHP session_start()函數(shù)。它將創(chuàng)建一個新會話并為用戶生成一個唯一的Session ID。
下面示例中的PHP代碼只是開始一個新Session。
<?php //開始 session session_start(); ?>
session_start()函數(shù)首先通過查找會話ID的存在來檢查會話是否已經(jīng)存在。如果找到一個會話,即會話已經(jīng)啟動,則設(shè)置會話變量,如果沒有,則通過創(chuàng)建新的會話ID來啟動新會話。
注意:您必須session_start()在頁面的開頭(即在瀏覽器中腳本生成的任何輸出之前)調(diào)用該函數(shù),就像在使用setcookie()函數(shù)設(shè)置cookie時一樣。
您可以將所有會話數(shù)據(jù)作為鍵值對存儲在$_SESSION[]超全局數(shù)組中。可以在會話的生存期內(nèi)訪問存儲的數(shù)據(jù)??匆韵履_本,該腳本創(chuàng)建一個新會話并注冊兩個會話變量。
<?php //正在啟動會話 session_start(); //存儲會話數(shù)據(jù) $_SESSION["firstname"] = "Peter"; $_SESSION["lastname"] = "Parker"; ?>
要訪問我們在上一個示例中從同一Web域的任何其他頁面上設(shè)置的會話數(shù)據(jù),只需調(diào)用session_start()即可重新創(chuàng)建會話,然后將相應(yīng)的鍵傳遞給$_SESSION關(guān)聯(lián)數(shù)組。
<?php //正在啟動會話 session_start(); //訪問會話數(shù)據(jù) echo 'Hi, ' . $_SESSION["firstname"] . ' ' . $_SESSION["lastname"]; ?>
上面示例中的PHP代碼產(chǎn)生以下輸出。
Hi, Peter Parker
注意:要訪問同一頁面中的會話數(shù)據(jù),無需重新創(chuàng)建會話,因為它已在頁面頂部啟動。
如果要刪除某些會話數(shù)據(jù),只需取消設(shè)置$_SESSION關(guān)聯(lián)數(shù)組的相應(yīng)鍵,如以下示例所示:
<?php //啟動會話 session_start(); //正在刪除會話數(shù)據(jù) if(isset($_SESSION["lastname"])){ unset($_SESSION["lastname"]); } ?>
但是,要完全銷毀會話,只需調(diào)用session_destroy()函數(shù)。該函數(shù)不需要任何參數(shù),一次調(diào)用會銷毀所有會話數(shù)據(jù)。
<?php //啟動會話 session_start(); //銷毀會話 session_destroy(); ?>
注意:在使用session_destroy()函數(shù)銷毀會話之前,如果會話環(huán)境尚未存在,則需要先使用session_start()函數(shù)重新創(chuàng)建該會話環(huán)境,以便進行銷毀。
每個PHP會話都有一個超時值(持續(xù)時間,以秒為單位),該值確定在沒有任何用戶活動的情況下會話應(yīng)保持活動狀態(tài)的時間。 您可以通過更改PHP配置文件(php.ini)中session.gc_maxlifetime變量的值來調(diào)整此超時時間。