首頁 > 後端開發 > php教程 > php session 會話(專題)

php session 會話(專題)

PHPz
發布: 2023-04-09 07:40:01
原創
7246 人瀏覽過

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, 值, 過期時間)


生效需要分二步驟完成: 先下達指令到瀏覽器,再由瀏覽器完成cookie 寫入

#二:PHP Session 基本函數介紹

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[&#39;username&#39;] = &#39;adminuser&#39;;


//获取session
$username = $_SESSION[&#39;username&#39;];


//删除session
unset($_SESSION[&#39;username&#39;]);


//清空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(&#39;session_create_id&#39;)) {
    function session_create_id()
    {
        return uniqid();
    }
}

//获取SESSION_ID
$session_id = isset($_GET[&#39;SESSION_ID&#39;]) ? $_GET[&#39;SESSION_ID&#39;] : session_create_id();

//设置 SESSION_ID
session_id($session_id);

//开启session
session_start();

$_SESSION[&#39;user&#39;] = &#39;user01&#39;;

//echo $_SESSION[&#39;user&#39;];

echo $session_id;
登入後複製

3、浏览计数器

利用 session 机制可以实现 记录用户的访问页面的次数,代码如下:

<?php
//开启session
session_start();

//判断是否设置浏览数
if (isset($_SESSION[&#39;view_num&#39;])) {
    //如果设置 浏览数加 1
    $_SESSION[&#39;view_num&#39;] = $_SESSION[&#39;view_num&#39;] + 1;
} else {
    //如果未设置 设置浏览数为 1
    $_SESSION[&#39;view_num&#39;] = 1;
}

die(&#39;当前浏览数为:&#39; . $_SESSION[&#39;view_num&#39;]);
?>
登入後複製

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[&#39;login_user&#39;])) {
    die(&#39;已登录!当前登录用户为:&#39; . $_SESSION[&#39;login_user&#39;]);
}

//判断是否为POST请求
if ($_SERVER[&#39;REQUEST_METHOD&#39;] === &#39;POST&#39;) {

    //检查是否输入用户名
    if (!isset($_POST[&#39;username&#39;]) || empty($_POST[&#39;username&#39;])) {
        die(&#39;请输入用户名!&#39;);
    }

    //检查是否输入密码
    if (!isset($_POST[&#39;password&#39;]) || empty($_POST[&#39;password&#39;])) {
        die(&#39;请输入密码!&#39;);
    }

    //模拟数据
    $data = [&#39;username&#39; => &#39;user01&#39;, &#39;password&#39; => md5(&#39;123456&#39;)];

    //检查用户名是否正确
    if ($_POST[&#39;username&#39;] === $data[&#39;username&#39;]) {
        //检查密码是否正确
        if (md5($_POST[&#39;password&#39;]) === $data[&#39;password&#39;]) {
            //保存登录状态
            $_SESSION[&#39;login_user&#39;] = $_POST[&#39;username&#39;];
            die(&#39;恭喜你登录成功!&#39;);
        }
    }

    //用户名或密码不正确
    die(&#39;用户名或密码不正确!&#39;);
}
?>
<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 视频教程

php session 會話(專題)

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原理

五:PHP 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 會話(專題)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板