php session 專題包含PHP Session概念、基本函數(shù)使用方法、PHP Session使用案例、PHP Session視頻教程以及相關(guān)精選文章,歡迎學(xué)習(xí)!
官方解釋:會話機制(Session)在PHP 中用于保持用戶連續(xù)訪問Web應(yīng)用時的相關(guān)數(shù)據(jù),有助于創(chuàng)建高度定制化的程序、增加站點的吸引力。
要理解什么是php session,首先要理解什么是會話機制
HTTP 是基于無連接的網(wǎng)絡(luò)協(xié)議, 每一次訪問,對于服務(wù)器來說,都是全新的
如果記住訪問者,以及記錄連接狀態(tài), 可以提升用戶體驗,完成許多個性化的功能,例如用戶登錄、購物車等
立即學(xué)習(xí)“PHP免費學(xué)習(xí)筆記(深入)”;
其實讓服務(wù)器記住用戶的方式很簡單, 就和生活中, 我們辦會員卡是一樣的
會員卡的存儲位置有二個地方, 要么放在你身上,要么保存到商家電腦中
所以,網(wǎng)絡(luò)中的用戶資料也會保存在二個地方:瀏覽器(客戶端)和服務(wù)器中
保存到瀏覽器中的叫: cookie
保存到服務(wù)器中的叫: session
延伸知識:php中session和cookie的區(qū)別
相關(guān)專題:php cookie(圖文專題)
保存在服務(wù)器端
變量: $_SESSION
變量過濾器: filter_input(INPUT_SESSION, key)
設(shè)置使用專用函數(shù): setcookie(名稱, 值, 過期時間)
生效需要分二步完成: 先下達指令到瀏覽器,再由瀏覽器完成 cookie 寫入
1.session_create_id?
創(chuàng)建新會話id
session_create_id ([ string $prefix ] ) : string
參數(shù)
prefix:如果指定了prefix,則新會話id將以prefix為前綴。會話id中不允許包含所有字符。允許使用a-z a-z 0-9、?, (逗號)和 - (減號)范圍內(nèi)的字符。
返回值
返回當前會話的新的無沖突會話id。如果在沒有活動會話的情況下使用它,則會忽略沖突檢查。
2.session_destroy
?銷毀一個會話中的全部數(shù)據(jù)
session_destroy ( void ) : bool
返回值
成功時返回 TRUE, 或者在失敗時返回 FALSE。
3.session_id
獲取/設(shè)置當前會話 ID
session_id ([ string $id ] ) : string
參數(shù)
id:如果指定了 id 參數(shù)的值, 則使用指定值作為會話 ID。 必須在調(diào)用 session_start() 函數(shù)之前調(diào)用 session_id() 函數(shù)。 不同的會話管理器對于會話 ID 中可以使用的字符有不同的限制。 例如文件會話管理器僅允許會話 ID 中使用以下字符:a-z A-Z 0-9 , (逗號)和 - (減號)
返回值
返回當前會話ID。 如果當前沒有會話,則返回空字符串("")。
4.session_name?
讀取/設(shè)置會話名稱
session_name ([ string $name ] ) : string
參數(shù)
name:用在 cookie 或者 URL 中的會話名稱, 例如:PHPSESSID。 只能使用字母和數(shù)字作為會話名稱,建議盡可能的短一些, 并且是望文知意的名字(對于啟用了 cookie 警告的用戶來說,方便其判斷是否要允許此 cookie)。 如果指定了 name 參數(shù), 那么當前會話也會使用指定值作為名稱。
返回值
返回當前會話名稱。如果指定 name 參數(shù),那么此函數(shù)會更新會話名稱,并且 返回 原來的 會話名稱。
5.session_start?
啟動新會話或者重用現(xiàn)有會話
session_start ([ array $options = array() ] ) : bool
參數(shù)
options:此參數(shù)是一個關(guān)聯(lián)數(shù)組,如果提供,那么會用其中的項目覆蓋 會話配置指示 中的配置項。此數(shù)組中的鍵無需包含 session. 前綴。
返回值
成功開始會話返回 TRUE ,反之返回 FALSE
6.session_status?
返回當前會話狀態(tài)
session_status ( void ) : int
返回值
PHP_SESSION_DISABLED 會話是被禁用的。
PHP_SESSION_NONE 會話是啟用的,但不存在當前會話。
PHP_SESSION_ACTIVE 會話是啟用的,而且存在當前會話。
7.session_unset?
釋放所有的會話變量
session_unset ( void ) : void
1、session基本操作
PHP Session 的常用基本操作
<?php //開啟session會話 session_start(); //設(shè)置session $_SESSION['username'] = 'adminuser'; //獲取session $username = $_SESSION['username']; //刪除session unset($_SESSION['username']); //清空session session_unset(); //或 $_SESSION = []; //銷毀session session_destroy();
2、瀏覽器禁用 cookie 解決方法
cookie和session的區(qū)別在于cookie是保存在客戶端的,而session是存儲在服務(wù)端中。它們都有生存時間的設(shè)置,session比cookie更安全。
當服務(wù)端與客戶端通信后會生成會話后,會建立一個和瀏覽器的唯一會話PHPSESSID。這個id會在服務(wù)端保存,也會用cookie形式保存在客戶端中。
?禁用cookie后session不能把唯一id通過cookie方式在客戶端中進行存儲,這時候php會在瀏覽器地址欄中以url明文get的方式來傳遞phpsessionid,來進行客戶端和服務(wù)端的唯一識別通信。
這樣一來程序的安全性大大降低了。所有在php.ini默認是關(guān)閉通過地址欄傳遞phpsessionid的,如果沒開啟就不能使用session,所以需要php.ini配置支持才行。
session.use_only_cookies = 1; // 開啟僅使用cookies存放會話id session.use_trans_sid = 1; // 允許Sessionid通過URL明文傳輸,默認為0關(guān)閉
或者使用代碼來實現(xiàn)
/** * 兼容 php7.1 以下版本 */ if (!function_exists('session_create_id')) { function session_create_id() { return uniqid(); } } //獲取SESSION_ID $session_id = isset($_GET['SESSION_ID']) ? $_GET['SESSION_ID'] : session_create_id(); //設(shè)置 SESSION_ID session_id($session_id); //開啟session session_start(); $_SESSION['user'] = 'user01'; //echo $_SESSION['user']; echo $session_id;
3、瀏覽計數(shù)器
利用 session 機制可以實現(xiàn) 記錄用戶的訪問頁面的次數(shù),代碼如下:
<?php //開啟session session_start(); //判斷是否設(shè)置瀏覽數(shù) if (isset($_SESSION['view_num'])) { //如果設(shè)置 瀏覽數(shù)加 1 $_SESSION['view_num'] = $_SESSION['view_num'] + 1; } else { //如果未設(shè)置 設(shè)置瀏覽數(shù)為 1 $_SESSION['view_num'] = 1; } die('當前瀏覽數(shù)為:' . $_SESSION['view_num']); ?>
4、使用 session 實現(xiàn)登錄功能
對于 Cookie 來說,假設(shè)我們要驗證用戶是否登陸,就必須在 Cookie 中保存用戶名和密碼(可能是 md5 加密后字符串),并在每次請求頁面的時候進行驗證。
如果用戶名和密碼存儲在數(shù)據(jù)庫,每次都要執(zhí)行一次數(shù)據(jù)庫查詢,給數(shù)據(jù)庫造成多余的負擔。因為我們并不能 只做一次驗證。為什么呢?
因為客戶端 Cookie 中的信息是有可能被修改的。假如你存儲 $admin 變量來表示用戶是否登陸,$admin 為 true 的時候表示登陸,為 false 的時候表示未登錄,在第一次通過驗證后將 $admin 等于 true 存儲在 Cookie,下次就不用驗證了,這樣對么?錯了,假如有人偽造一個值為 true 的 $admin 變量那不是就立即取的了管理權(quán)限么?非常的不安全。
而 Session 就不同了,Session 是存儲在服務(wù)器端的,遠程用戶沒辦法修改 Session 文件的內(nèi)容,因此我們可以單純存儲一個 $admin 變量來判斷是否登陸,首次驗證通過后設(shè)置 $admin 值為 true,以后判斷該值是否為 true,假如不是,轉(zhuǎn)入登陸界面,這樣就可以減少很多數(shù)據(jù)庫操作了。
而且可以減少每次為了驗證 Cookie 而傳遞密碼的不安全性了(Session 驗證只需要傳遞一次,假如你沒有使用 SSL 安全協(xié)議的話)。即使密碼進行了 md5 加密,也是很容易被截獲的。
當然使用 Session 還有很多優(yōu)點,比如控制容易,可以按照用戶自定義存儲等(存儲于數(shù)據(jù)庫)。
下面是一個簡單的用戶登錄示例:
<?php session_start(); //判斷是否登錄 if (isset($_SESSION['login_user'])) { die('已登錄!當前登錄用戶為:' . $_SESSION['login_user']); } //判斷是否為POST請求 if ($_SERVER['REQUEST_METHOD'] === 'POST') { //檢查是否輸入用戶名 if (!isset($_POST['username']) || empty($_POST['username'])) { die('請輸入用戶名!'); } //檢查是否輸入密碼 if (!isset($_POST['password']) || empty($_POST['password'])) { die('請輸入密碼!'); } //模擬數(shù)據(jù) $data = ['username' => 'user01', 'password' => md5('123456')]; //檢查用戶名是否正確 if ($_POST['username'] === $data['username']) { //檢查密碼是否正確 if (md5($_POST['password']) === $data['password']) { //保存登錄狀態(tài) $_SESSION['login_user'] = $_POST['username']; die('恭喜你登錄成功!'); } } //用戶名或密碼不正確 die('用戶名或密碼不正確!'); } ?> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="=device-width, initial-scale=1.0"> <title>用戶登錄</title> </head> <body> <form action="./session02.php" method="post"> <input type="text" name="username" placeholder="請輸入用戶名!"> <input type="password" name="password" placeholder="請輸入密碼!"> <button type="submit">登錄</button> </form> </body> </html>
6.PHP高級視頻教程之和session存儲相關(guān)的一些面試題
7.ThinkPHP5基礎(chǔ)講解視頻教程之Session的使用
8.ThinkPHP5基礎(chǔ)講解視頻教程之Session的使用
9.php cookie0
10.php cookie1
11.php cookie2
1.php cookie3
2.php cookie4
3.php cookie5
4.php cookie6
5.php cookie7
6.php cookie8
7.php cookie9
以上就是php session 會話(專題)的詳細內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
PHP怎么學(xué)習(xí)?PHP怎么入門?PHP在哪學(xué)?PHP怎么學(xué)才快?不用擔心,這里為大家提供了PHP速學(xué)教程(入門到精通),有需要的小伙伴保存下載就能學(xué)習(xí)啦!
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://m.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號