php session 會話(專題)
php session 專題包含PHP Session概念、基本函數使用方法、PHP Session使用案例、PHP Session影片教學以及相關精選文章,歡迎學習!
一:PHP Session 是什麼?
官方解釋:會話機制(Session
)在PHP 中用於保持使用者連續存取Web應用時的相關數據,有助於創建高度客製化的程序、增加站點的吸引力。
要理解什麼是php session,首先要理解什麼是會話機制
#會話機制
HTTP 是基於無連接的網路協議, 每一次訪問,對於伺服器來說,都是全新的
如果記住訪問者,以及記錄連接狀態, 可以提升用戶體驗,完成許多個性化的功能,例如用戶登錄、購物車等
其實讓伺服器記住使用者的方式很簡單, 就和生活中, 我們辦會員卡是一樣的
會員卡的儲存位置有二個地方, 要么放在你身上,要么儲存到商家電腦中
所以,網路中的使用者資料也會儲存在二個地方:瀏覽器(客戶端)和伺服器中
儲存到瀏覽器中的叫: cookie
儲存到伺服器中的叫: session
#延伸知識:php中session和cookie的區別
- 相關專題: php cookie
- (圖文專題) PHP Session 重點
儲存在伺服器端
變數: $_SESSION
- 變數過濾器: filter_input(INPUT_SESSION, key)
- 設定使用專用函數: setcookie(name, 值, 過期時間)
#二:PHP Session 基本函數介紹
1.session_create_id
建立新會話idsession_create_id ([ string $prefix ] ) : string
prefix:如果指定了prefix,則新會話id將以prefix為前綴。會話id中不允許包含所有字元。允許使用a-z a-z 0-9、 , (逗號)和 - (減號)範圍內的字元。 傳回值
傳回目前會話的新的無衝突會話id。如果在沒有活動會話的情況下使用它,則會忽略衝突檢查。
銷毀一個會話中的全部資料
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 參數,那麼此函數會更新會話名稱,並且 傳回 原來的 會話名稱。
5.session_start
啟動新會話或重複使用現有會話
session_start ([ array $options = array() ] ) : bool
參數
options :此參數是一個關聯數組,如果提供,那麼會用其中的項目覆寫會話配置指示中的配置項目。此陣列中的鍵無需包含 session. 前綴。
回傳值
成功開始會話回傳TRUE ,反之回傳FALSE6.session_status
#傳回目前會話狀態
session_status ( void ) : int
傳回值PHP_SESSION_DISABLED 會話是被停用的。
PHP_SESSION_NONE 會話是啟用的,但不存在目前會話。
PHP_SESSION_ACTIVE 會話是啟用的,而且存在目前會話。
session_unset ( void ) : void
<?php //开启session会话 session_start(); //设置session $_SESSION['username'] = 'adminuser'; //获取session $username = $_SESSION['username']; //删除session unset($_SESSION['username']); //清空session session_unset(); //或 $_SESSION = []; //销毁session session_destroy();
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>
四:PHP Session 视频教程
6.PHP高级视频教程之和session存储相关的一些面试题
7.ThinkPHP5基础讲解视频教程之Session的使用
8.ThinkPHP5基础讲解视频教程之Session的使用
10.会话管理视频教程
五:PHP Session 精选技术文章
7.Laravel使用Redis共享Session(程式碼詳解)
8.ThinkPHP6.0:Session與Cookie機制的變化
10.php實現會員登陸註冊頁有html加Session和Cookie
13.微信小程式之取得session_key與openid的案例(圖)
14.Session共享:php和redis叢集如何實作Session共享
#16.tp5實作登入並儲存session,再由不同角色權限跳到頁面
#20. PHP保持Session不過期的方法
以上是php session 會話(專題)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Memcached是一種常用的快取技術,它可以讓Web應用程式的效能得到很大的提升。在PHP中,常用的Session處理方式是將Session檔案存放在伺服器的硬碟上。但是,這種方式並不是最優的,因為伺服器的硬碟會成為效能瓶頸之一。而使用Memcached快取技術可以對PHP中的Session處理進行最佳化,提升Web應用程式的效能。 PHP中的Session處

PHPSession跨域與跨站請求偽造的對比分析隨著網路的發展,Web應用程式的安全性顯得格外重要。在開發Web應用程式時,PHPSession是一種常用的身份驗證和會話追蹤機制,而跨域請求和跨站請求偽造(CSRF)則是兩種主要的安全威脅。為了保護使用者資料和應用程式的安全性,開發人員需要了解Session跨域和CSRF的區別,並採

解決PHPSession跨域問題的最佳實踐隨著互聯網的發展,前後端分離的開發模式越來越普遍。在這種模式下,前端與後端可能部署在不同的網域下,這就導致了跨域問題的出現。而在使用PHP的過程中,跨域問題也牽涉到Session的傳遞與管理。本文將介紹PHP中解決Session跨域問題的最佳實踐,並提供具體的程式碼範例。使用Cookie使用Coo

PHPSession跨域的跨平台相容性處理隨著Web應用程式的發展,越來越多的開發者面臨跨域的問題。跨域是指在一個網域下的網頁去請求另一個網域下的資源,這在一定程度上增加了開發難度,特別是對於涉及到會話(Session)管理的應用程式來說,更是一個棘手的問題。本文將介紹如何在PHP中處理跨域的會話管理,並提供一些具體的程式碼範例。會話管理是We

PHPSession跨域與跨站腳本攻擊的關係隨著網路應用的廣泛應用,安全性問題也日益引起人們的關注。在開發網頁應用程式時,處理使用者會話(Session)是非常常見的一個需求。而PHP提供了一個方便的會話管理機制-Session。但是,Session也存在一些安全性問題,特別是與跨網域和跨站腳本攻擊相關的問題。跨域攻擊(Cross-Domain)是指透過一種網站

PHPSession跨域錯誤日誌處理在開發Web應用程式時,我們經常使用PHP的Session功能來追蹤使用者的狀態。然而,在某些情況下,會出現跨域的錯誤,導致無法正確存取和操作Session資料。本文將介紹如何處理PHPSession跨域錯誤,並提供具體的程式碼範例。什麼是PHPSession跨域錯誤?跨域錯誤指的是瀏覽器中

PHPSession跨域與多層系統架構的適配性分析隨著網際網路技術的發展,多層系統架構在Web應用程式中變得越來越常見。而在多層系統架構中,跨域存取是常見的需求。而PHP中的Session機制也是廣泛應用於Web應用程式中的身份驗證和資料共享等功能。本文將深入探討PHPSession在多層系統架構的跨域適配性,並提供具體的程式碼示

PHPSession跨域的安全審計與漏洞挖掘摘要:隨著網際網路的發展,越來越多的網站開始使用PHPSession來管理使用者的登入狀態和資料。然而,由於PHPSession的特性,使得它存在一些安全風險,尤其是在跨域存取的情況下。本文將介紹PHPSession跨域安全審計的重要性,並提供一些具體的漏洞挖掘程式碼範例。一、引言PHPSession是一種在
