一:PHP Session 是什么?php session 專題包含PHP Session概念、基本函數(shù)使用方法、PHP Session使用案例、PHP Session視頻教程以及相關(guān)精選文章,歡迎學(xué)習(xí)!
創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供六合網(wǎng)站建設(shè)、六合做網(wǎng)站、六合網(wǎng)站設(shè)計(jì)、六合網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、六合企業(yè)網(wǎng)站模板建站服務(wù),十余年六合做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
官方解釋:會(huì)話機(jī)制(Session
)在PHP 中用于保持用戶連續(xù)訪問Web應(yīng)用時(shí)的相關(guān)數(shù)據(jù),有助于創(chuàng)建高度定制化的程序、增加站點(diǎn)的吸引力。
要理解什么是php session,首先要理解什么是會(huì)話機(jī)制
會(huì)話機(jī)制HTTP 是基于無連接的網(wǎng)絡(luò)協(xié)議, 每一次訪問,對(duì)于服務(wù)器來說,都是全新的
如果記住訪問者,以及記錄連接狀態(tài), 可以提升用戶體驗(yàn),完成許多個(gè)性化的功能,例如用戶登錄、購(gòu)物車等
其實(shí)讓服務(wù)器記住用戶的方式很簡(jiǎn)單, 就和生活中, 我們辦會(huì)員卡是一樣的
會(huì)員卡的存儲(chǔ)位置有二個(gè)地方, 要么放在你身上,要么保存到商家電腦中
所以,網(wǎng)絡(luò)中的用戶資料也會(huì)保存在二個(gè)地方:瀏覽器(客戶端)和服務(wù)器中
保存到瀏覽器中的叫: cookie
保存到服務(wù)器中的叫: session
PHP Session 要點(diǎn)延伸知識(shí):php中session和cookie的區(qū)別
保存在服務(wù)器端
變量: $_SESSION
變量過濾器: filter_input(INPUT_SESSION, key)
設(shè)置使用專用函數(shù): setcookie(名稱, 值, 過期時(shí)間)
生效需要分二步完成: 先下達(dá)指令到瀏覽器,再由瀏覽器完成 cookie 寫入
二:PHP Session 基本函數(shù)介紹1.session_create_id
創(chuàng)建新會(huì)話id
session_create_id ([ string $prefix ] ) : string
參數(shù)
prefix:如果指定了prefix,則新會(huì)話id將以prefix為前綴。會(huì)話id中不允許包含所有字符。允許使用a-z a-z 0-9、 , (逗號(hào))和 - (減號(hào))范圍內(nèi)的字符。
返回值
返回當(dāng)前會(huì)話的新的無沖突會(huì)話id。如果在沒有活動(dòng)會(huì)話的情況下使用它,則會(huì)忽略沖突檢查。
2.session_destroy
銷毀一個(gè)會(huì)話中的全部數(shù)據(jù)
session_destroy ( void ) : bool
返回值
成功時(shí)返回 TRUE, 或者在失敗時(shí)返回 FALSE。
3.session_id
獲取/設(shè)置當(dāng)前會(huì)話 ID
session_id ([ string $id ] ) : string
參數(shù)
id:如果指定了 id 參數(shù)的值, 則使用指定值作為會(huì)話 ID。 必須在調(diào)用 session_start() 函數(shù)之前調(diào)用 session_id() 函數(shù)。 不同的會(huì)話管理器對(duì)于會(huì)話 ID 中可以使用的字符有不同的限制。 例如文件會(huì)話管理器僅允許會(huì)話 ID 中使用以下字符:a-z A-Z 0-9 , (逗號(hào))和 - (減號(hào))
返回值
返回當(dāng)前會(huì)話ID。 如果當(dāng)前沒有會(huì)話,則返回空字符串("")。
4.session_name
讀取/設(shè)置會(huì)話名稱
session_name ([ string $name ] ) : string
參數(shù)
name:用在 cookie 或者 URL 中的會(huì)話名稱, 例如:PHPSESSID。 只能使用字母和數(shù)字作為會(huì)話名稱,建議盡可能的短一些, 并且是望文知意的名字(對(duì)于啟用了 cookie 警告的用戶來說,方便其判斷是否要允許此 cookie)。 如果指定了 name 參數(shù), 那么當(dāng)前會(huì)話也會(huì)使用指定值作為名稱。
返回值
返回當(dāng)前會(huì)話名稱。如果指定 name 參數(shù),那么此函數(shù)會(huì)更新會(huì)話名稱,并且 返回 原來的 會(huì)話名稱。
5.session_start
啟動(dòng)新會(huì)話或者重用現(xiàn)有會(huì)話
session_start ([ array $options = array() ] ) : bool
參數(shù)
options:此參數(shù)是一個(gè)關(guān)聯(lián)數(shù)組,如果提供,那么會(huì)用其中的項(xiàng)目覆蓋 會(huì)話配置指示 中的配置項(xiàng)。此數(shù)組中的鍵無需包含 session. 前綴。
返回值
成功開始會(huì)話返回 TRUE ,反之返回 FALSE
6.session_status
返回當(dāng)前會(huì)話狀態(tài)
session_status ( void ) : int
返回值
PHP_SESSION_DISABLED 會(huì)話是被禁用的。
PHP_SESSION_NONE 會(huì)話是啟用的,但不存在當(dāng)前會(huì)話。
PHP_SESSION_ACTIVE 會(huì)話是啟用的,而且存在當(dāng)前會(huì)話。
7.session_unset
釋放所有的會(huì)話變量
session_unset ( void ) : void三:使用案例
1、session基本操作
PHP Session 的常用基本操作
<?php //開啟session會(huì)話 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是存儲(chǔ)在服務(wù)端中。它們都有生存時(shí)間的設(shè)置,session比cookie更安全。
當(dāng)服務(wù)端與客戶端通信后會(huì)生成會(huì)話后,會(huì)建立一個(gè)和瀏覽器的唯一會(huì)話PHPSESSID。這個(gè)id會(huì)在服務(wù)端保存,也會(huì)用cookie形式保存在客戶端中。
禁用cookie后session不能把唯一id通過cookie方式在客戶端中進(jìn)行存儲(chǔ),這時(shí)候php會(huì)在瀏覽器地址欄中以u(píng)rl明文get的方式來傳遞phpsessionid,來進(jìn)行客戶端和服務(wù)端的唯一識(shí)別通信。
這樣一來程序的安全性大大降低了。所有在php.ini默認(rèn)是關(guān)閉通過地址欄傳遞phpsessionid的,如果沒開啟就不能使用session,所以需要php.ini配置支持才行。
session.use_only_cookies = 1; // 開啟僅使用cookies存放會(huì)話id session.use_trans_sid = 1; // 允許Sessionid通過URL明文傳輸,默認(rèn)為0關(guān)閉
或者使用代碼來實(shí)現(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、瀏覽計(jì)數(shù)器
利用 session 機(jī)制可以實(shí)現(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('當(dāng)前瀏覽數(shù)為:' . $_SESSION['view_num']); ?>
4、使用 session 實(shí)現(xiàn)登錄功能
對(duì)于 Cookie 來說,假設(shè)我們要驗(yàn)證用戶是否登陸,就必須在 Cookie 中保存用戶名和密碼(可能是 md5 加密后字符串),并在每次請(qǐng)求頁面的時(shí)候進(jìn)行驗(yàn)證。
如果用戶名和密碼存儲(chǔ)在數(shù)據(jù)庫(kù),每次都要執(zhí)行一次數(shù)據(jù)庫(kù)查詢,給數(shù)據(jù)庫(kù)造成多余的負(fù)擔(dān)。因?yàn)槲覀儾⒉荒?只做一次驗(yàn)證。為什么呢?
因?yàn)榭蛻舳?Cookie 中的信息是有可能被修改的。假如你存儲(chǔ) $admin 變量來表示用戶是否登陸,$admin 為 true 的時(shí)候表示登陸,為 false 的時(shí)候表示未登錄,在第一次通過驗(yàn)證后將 $admin 等于 true 存儲(chǔ)在 Cookie,下次就不用驗(yàn)證了,這樣對(duì)么?錯(cuò)了,假如有人偽造一個(gè)值為 true 的 $admin 變量那不是就立即取的了管理權(quán)限么?非常的不安全。
而 Session 就不同了,Session 是存儲(chǔ)在服務(wù)器端的,遠(yuǎn)程用戶沒辦法修改 Session 文件的內(nèi)容,因此我們可以單純存儲(chǔ)一個(gè) $admin 變量來判斷是否登陸,首次驗(yàn)證通過后設(shè)置 $admin 值為 true,以后判斷該值是否為 true,假如不是,轉(zhuǎn)入登陸界面,這樣就可以減少很多數(shù)據(jù)庫(kù)操作了。
而且可以減少每次為了驗(yàn)證 Cookie 而傳遞密碼的不安全性了(Session 驗(yàn)證只需要傳遞一次,假如你沒有使用 SSL 安全協(xié)議的話)。即使密碼進(jìn)行了 md5 加密,也是很容易被截獲的。
當(dāng)然使用 Session 還有很多優(yōu)點(diǎn),比如控制容易,可以按照用戶自定義存儲(chǔ)等(存儲(chǔ)于數(shù)據(jù)庫(kù))。
下面是一個(gè)簡(jiǎn)單的用戶登錄示例:
<?php session_start(); //判斷是否登錄 if (isset($_SESSION['login_user'])) { die('已登錄!當(dāng)前登錄用戶為:' . $_SESSION['login_user']); } //判斷是否為POST請(qǐng)求 if ($_SERVER['REQUEST_METHOD'] === 'POST') { //檢查是否輸入用戶名 if (!isset($_POST['username']) || empty($_POST['username'])) { die('請(qǐng)輸入用戶名!'); } //檢查是否輸入密碼 if (!isset($_POST['password']) || empty($_POST['password'])) { die('請(qǐng)輸入密碼!'); } //模擬數(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="請(qǐng)輸入用戶名!"> <input type="password" name="password" placeholder="請(qǐng)輸入密碼!"> <button type="submit">登錄</button> </form> </body> </html>四:PHP Session 視頻教程
1.PHP中session如何存儲(chǔ)及刪除變量的
2.PHP如何用session來判斷用戶是否登錄
3.PHP如何用session來記錄用戶登陸信息
4.php視頻教程之PHP會(huì)話管理
5.PHP視頻教程之會(huì)話控制session的工作機(jī)制
6.PHP高級(jí)視頻教程之和session存儲(chǔ)相關(guān)的一些面試題
7.ThinkPHP5基礎(chǔ)講解視頻教程之Session的使用
8.ThinkPHP5基礎(chǔ)講解視頻教程之Session的使用
9.PHP經(jīng)典實(shí)戰(zhàn)視頻教程之SESSION示例(購(gòu)物車)
10.會(huì)話管理視頻教程
11.Blog項(xiàng)目實(shí)戰(zhàn)之session原理
五:PHP Session 精選技術(shù)文章1.PHP7中創(chuàng)建session和銷毀session的方法
2.利用php設(shè)置一個(gè)嚴(yán)格控制過期時(shí)間的session
3.php三種清空session的方式
4.PHP設(shè)置web集群session同步步驟詳解
5.通過Session對(duì)用戶操作權(quán)限進(jìn)行判斷的實(shí)例詳解
6.Redis保存PHP Session的方法
7.Laravel使用Redis共享Session(代碼詳解)
8.ThinkPHP6.0:Session和Cookie機(jī)制的變化
9.PHP中Session ID的實(shí)現(xiàn)原理分析
10.php實(shí)現(xiàn)會(huì)員登陸注冊(cè)頁有html加Session和Cookie
11.php通過session_id恢復(fù)session內(nèi)容
12.深入介紹PHP.ini中的session主要配置
13.微信小程序之獲取session_key與openid的案例(圖)
14.Session共享:php和redis集群如何實(shí)現(xiàn)Session共享
15.redis實(shí)現(xiàn)session共享的方法介紹
16.tp5實(shí)現(xiàn)登錄并保存session,再由不同角色權(quán)限跳轉(zhuǎn)頁面
17.理解php session運(yùn)行機(jī)制
18.PHP獲取不到SESSION信息之一般情況解決方案
19.PHP+Session防止表單重復(fù)提交步驟詳解
20.PHP保持Session不過期的方法
21.PHP提高SESSION響應(yīng)速度的方法
22.MemCache緩存與Session(知識(shí)匯總)
23.前端獲得session信息的幾種方式的對(duì)比
24.Laravel處理session(會(huì)話)的方法詳解
本文題目:phpsession會(huì)話(專題)
分享網(wǎng)址:http://www.rwnh.cn/article28/cphojp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、企業(yè)網(wǎng)站制作、自適應(yīng)網(wǎng)站、定制網(wǎng)站、用戶體驗(yàn)、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)