目錄
一:PHP Session 是什麼?
#會話機制
6.session_status 
四:PHP Session 视频教程
五:PHP Session 精选技术文章
首頁 後端開發 php教程 php session 會話(專題)

php session 會話(專題)

Jul 11, 2020 pm 05:55 PM
php session

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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

Memcached快取技術對於PHP中的Session處理的最佳化 Memcached快取技術對於PHP中的Session處理的最佳化 May 16, 2023 am 08:41 AM

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

PHP Session 跨域與跨站請求偽造的比較分析 PHP Session 跨域與跨站請求偽造的比較分析 Oct 12, 2023 pm 12:58 PM

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

解決 PHP Session 跨域問題的最佳實踐 解決 PHP Session 跨域問題的最佳實踐 Oct 12, 2023 pm 01:40 PM

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

PHP Session 跨域的跨平台相容性處理 PHP Session 跨域的跨平台相容性處理 Oct 12, 2023 am 09:46 AM

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

PHP Session 跨域與跨站腳本攻擊的關係 PHP Session 跨域與跨站腳本攻擊的關係 Oct 12, 2023 pm 12:58 PM

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

分析 PHP Session 跨域的錯誤日誌處理 分析 PHP Session 跨域的錯誤日誌處理 Oct 12, 2023 pm 01:42 PM

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

PHP Session 跨域與多層系統架構的適配性分析 PHP Session 跨域與多層系統架構的適配性分析 Oct 12, 2023 pm 02:34 PM

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

PHP Session 跨域的安全審計與漏洞挖掘 PHP Session 跨域的安全審計與漏洞挖掘 Oct 12, 2023 am 11:23 AM

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

See all articles