php session 專題包含PHP Session概念、基本函數使用方法、PHP Session使用案例、PHP Session影片教學以及相關精選文章,歡迎學習!
官方解釋:會話機制(Session
)在PHP 中用於保持使用者連續存取Web應用時的相關數據,有助於創建高度客製化的程序、增加站點的吸引力。
要理解什麼是php session,首先要理解什麼是會話機制
HTTP 是基於無連接的網路協議, 每一次訪問,對於伺服器來說,都是全新的
如果記住訪問者,以及記錄連接狀態, 可以提升用戶體驗,完成許多個性化的功能,例如用戶登錄、購物車等
其實讓伺服器記住使用者的方式很簡單, 就和生活中, 我們辦會員卡是一樣的
會員卡的儲存位置有二個地方, 要么放在你身上,要么儲存到商家電腦中
所以,網路中的使用者資料也會儲存在二個地方:瀏覽器(客戶端)和伺服器中
儲存到瀏覽器中的叫: cookie
儲存到伺服器中的叫: session
#延伸知識:php中session和cookie的區別
儲存在伺服器端
變數: $_SESSION
#二: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_idsession_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 ,反之回傳FALSE#傳回目前會話狀態
session_status ( void ) : int
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>
6.PHP高级视频教程之和session存储相关的一些面试题
7.ThinkPHP5基础讲解视频教程之Session的使用
8.ThinkPHP5基础讲解视频教程之Session的使用
10.会话管理视频教程
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中文網其他相關文章!