您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關什么是php session 會話,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
php session 專題包含PHP Session概念、基本函數使用方法、PHP Session使用案例、PHP Session視頻教程以及相關精選文章,歡迎學習!
官方解釋:會話機制(Session
)在PHP 中用于保持用戶連續訪問Web應用時的相關數據,有助于創建高度定制化的程序、增加站點的吸引力。
要理解什么是php session,首先要理解什么是會話機制
HTTP 是基于無連接的網絡協議, 每一次訪問,對于服務器來說,都是全新的
如果記住訪問者,以及記錄連接狀態, 可以提升用戶體驗,完成許多個性化的功能,例如用戶登錄、購物車等
其實讓服務器記住用戶的方式很簡單, 就和生活中, 我們辦會員卡是一樣的
會員卡的存儲位置有二個地方, 要么放在你身上,要么保存到商家電腦中
所以,網絡中的用戶資料也會保存在二個地方:瀏覽器(客戶端)和服務器中
保存到瀏覽器中的叫: cookie
保存到服務器中的叫: session
延伸知識:php中session和cookie的區別
保存在服務器端
變量: $_SESSION
變量過濾器: filter_input(INPUT_SESSION, key)
設置使用專用函數: setcookie(名稱, 值, 過期時間)
生效需要分二步完成: 先下達指令到瀏覽器,再由瀏覽器完成 cookie 寫入
1.session_create_id
創建新會話id
session_create_id ([ string $prefix ] ) : string
參數
prefix:如果指定了prefix,則新會話id將以prefix為前綴。會話id中不允許包含所有字符。允許使用a-z a-z 0-9、 , (逗號)和 - (減號)范圍內的字符。
返回值
返回當前會話的新的無沖突會話id。如果在沒有活動會話的情況下使用它,則會忽略沖突檢查。
2.session_destroy
銷毀一個會話中的全部數據
session_destroy ( void ) : bool
返回值
成功時返回 TRUE, 或者在失敗時返回 FALSE。
3.session_id
獲取/設置當前會話 ID
session_id ([ string $id ] ) : string
參數
id:如果指定了 id 參數的值, 則使用指定值作為會話 ID。 必須在調用 session_start() 函數之前調用 session_id() 函數。 不同的會話管理器對于會話 ID 中可以使用的字符有不同的限制。 例如文件會話管理器僅允許會話 ID 中使用以下字符:a-z A-Z 0-9 , (逗號)和 - (減號)
返回值
返回當前會話ID。 如果當前沒有會話,則返回空字符串("")。
4.session_name
讀取/設置會話名稱
session_name ([ string $name ] ) : string
參數
name:用在 cookie 或者 URL 中的會話名稱, 例如:PHPSESSID。 只能使用字母和數字作為會話名稱,建議盡可能的短一些, 并且是望文知意的名字(對于啟用了 cookie 警告的用戶來說,方便其判斷是否要允許此 cookie)。 如果指定了 name 參數, 那么當前會話也會使用指定值作為名稱。
返回值
返回當前會話名稱。如果指定 name 參數,那么此函數會更新會話名稱,并且 返回 原來的 會話名稱。
5.session_start
啟動新會話或者重用現有會話
session_start ([ array $options = array() ] ) : bool
參數
options:此參數是一個關聯數組,如果提供,那么會用其中的項目覆蓋 會話配置指示 中的配置項。此數組中的鍵無需包含 session. 前綴。
返回值
成功開始會話返回 TRUE ,反之返回 FALSE
6.session_status
返回當前會話狀態
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(); //設置session $_SESSION['username'] = 'adminuser'; //獲取session $username = $_SESSION['username']; //刪除session unset($_SESSION['username']); //清空session session_unset(); //或 $_SESSION = []; //銷毀session session_destroy();
2、瀏覽器禁用 cookie 解決方法
cookie和session的區別在于cookie是保存在客戶端的,而session是存儲在服務端中。它們都有生存時間的設置,session比cookie更安全。
當服務端與客戶端通信后會生成會話后,會建立一個和瀏覽器的唯一會話PHPSESSID。這個id會在服務端保存,也會用cookie形式保存在客戶端中。
禁用cookie后session不能把唯一id通過cookie方式在客戶端中進行存儲,這時候php會在瀏覽器地址欄中以url明文get的方式來傳遞phpsessionid,來進行客戶端和服務端的唯一識別通信。
這樣一來程序的安全性大大降低了。所有在php.ini默認是關閉通過地址欄傳遞phpsessionid的,如果沒開啟就不能使用session,所以需要php.ini配置支持才行。
session.use_only_cookies = 1; // 開啟僅使用cookies存放會話id session.use_trans_sid = 1; // 允許Sessionid通過URL明文傳輸,默認為0關閉
或者使用代碼來實現
/** * 兼容 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(); //設置 SESSION_ID session_id($session_id); //開啟session session_start(); $_SESSION['user'] = 'user01'; //echo $_SESSION['user']; echo $session_id;
3、瀏覽計數器
利用 session 機制可以實現 記錄用戶的訪問頁面的次數,代碼如下:
<?php //開啟session session_start(); //判斷是否設置瀏覽數 if (isset($_SESSION['view_num'])) { //如果設置 瀏覽數加 1 $_SESSION['view_num'] = $_SESSION['view_num'] + 1; } else { //如果未設置 設置瀏覽數為 1 $_SESSION['view_num'] = 1; } die('當前瀏覽數為:' . $_SESSION['view_num']); ?>
4、使用 session 實現登錄功能
對于 Cookie 來說,假設我們要驗證用戶是否登陸,就必須在 Cookie 中保存用戶名和密碼(可能是 md5 加密后字符串),并在每次請求頁面的時候進行驗證。
如果用戶名和密碼存儲在數據庫,每次都要執行一次數據庫查詢,給數據庫造成多余的負擔。因為我們并不能 只做一次驗證。為什么呢?
因為客戶端 Cookie 中的信息是有可能被修改的。假如你存儲 $admin 變量來表示用戶是否登陸,$admin 為 true 的時候表示登陸,為 false 的時候表示未登錄,在第一次通過驗證后將 $admin 等于 true 存儲在 Cookie,下次就不用驗證了,這樣對么?錯了,假如有人偽造一個值為 true 的 $admin 變量那不是就立即取的了管理權限么?非常的不安全。
而 Session 就不同了,Session 是存儲在服務器端的,遠程用戶沒辦法修改 Session 文件的內容,因此我們可以單純存儲一個 $admin 變量來判斷是否登陸,首次驗證通過后設置 $admin 值為 true,以后判斷該值是否為 true,假如不是,轉入登陸界面,這樣就可以減少很多數據庫操作了。
而且可以減少每次為了驗證 Cookie 而傳遞密碼的不安全性了(Session 驗證只需要傳遞一次,假如你沒有使用 SSL 安全協議的話)。即使密碼進行了 md5 加密,也是很容易被截獲的。
當然使用 Session 還有很多優點,比如控制容易,可以按照用戶自定義存儲等(存儲于數據庫)。
下面是一個簡單的用戶登錄示例:
<?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('請輸入密碼!'); } //模擬數據 $data = ['username' => 'user01', 'password' => md5('123456')]; //檢查用戶名是否正確 if ($_POST['username'] === $data['username']) { //檢查密碼是否正確 if (md5($_POST['password']) === $data['password']) { //保存登錄狀態 $_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>
1.PHP中session如何存儲及刪除變量的
2.PHP如何用session來判斷用戶是否登錄
3.PHP如何用session來記錄用戶登陸信息
4.php視頻教程之PHP會話管理
5.PHP視頻教程之會話控制session的工作機制
6.PHP高級視頻教程之和session存儲相關的一些面試題
7.ThinkPHP5基礎講解視頻教程之Session的使用
8.ThinkPHP5基礎講解視頻教程之Session的使用
9.PHP經典實戰視頻教程之SESSION示例(購物車)
10.會話管理視頻教程
11.Blog項目實戰之session原理
1.PHP7中創建session和銷毀session的方法
2.利用php設置一個嚴格控制過期時間的session
3.php三種清空session的方式
4.PHP設置web集群session同步步驟詳解
5.通過Session對用戶操作權限進行判斷的實例詳解
6.Redis保存PHP Session的方法
7.Laravel使用Redis共享Session(代碼詳解)
8.ThinkPHP6.0:Session和Cookie機制的變化
9.PHP中Session ID的實現原理分析
10.php實現會員登陸注冊頁有html加Session和Cookie
11.php通過session_id恢復session內容
12.深入介紹PHP.ini中的session主要配置
13.微信小程序之獲取session_key與openid的案例(圖)
14.Session共享:php和redis集群如何實現Session共享
15.redis實現session共享的方法介紹
16.tp5實現登錄并保存session,再由不同角色權限跳轉頁面
17.理解php session運行機制
18.PHP獲取不到SESSION信息之一般情況解決方案
19.PHP+Session防止表單重復提交步驟詳解
20.PHP保持Session不過期的方法
21.PHP提高SESSION響應速度的方法
22.MemCache緩存與Session(知識匯總)
23.前端獲得session信息的幾種方式的對比
24.Laravel處理session(會話)的方法詳解
關于什么是php session 會話就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。