首頁 後端開發 php教程 session儲存的替代方法redis

session儲存的替代方法redis

Jul 30, 2016 pm 01:31 PM
function return session this

php預設使用檔案儲存session,如果並發量大,效率非常低。而redis對高並發的支援非常好,所以,可以使用redis替代檔來儲存session。
這裡,介紹下php的session_set_save_handler 函數的功能與使用方法。此函數定義使用者級session保存函數(如開啟、關閉、寫入等)。原型如下:

<code>bool session_set_save_hanler(callback open,callback close,callback read,callback write,callback destory,callback gc)
</code>
登入後複製

在使用函數前,先把php.ini設定檔的session.save_handler選項設為user,否則session_set_save_handle 不會生效。

下面是使用redis儲存session的一個實例。

寫一個session管理類別sessionManager ,程式碼如下:

<code><?php

class SessionManager {
    private $reids;
    private $sessionSavePath;
    private $sessionName;
    private $sessi

    public function __construct() {
        $this->reids=new Redis();
        $this->reids->connect('127.0.0.1',6379);

        $retval=session_set_save_handler(
            array($this,"open"),
            array($this,"close"),
            array($this,"read"),
            array($this,"write"),
            array($this,"destroy"),
            array($this,"gc")
        );
}

public function open($path,$name) {
    return true;
}

public function close() {
    return true;
}

public function read($id) {
    $vale=$this->reids->get($id);
    if($vale) {
        return $vale;
    }else {
        return '';
    }
}

public function write($id,$data) {
    if($this->reids->set($id,$data)) {
        $this->reids->expire($id,$this->sessionExpireTime);
        return true;
    }
    return false;
}

public function destroy($id) {
    if($this->reids->delete($id)) {
        return true;
    }
    return false;
}

public function gc($maxlifetime) {
    return true;
}

    public function __destruct() {
        session_write_close();
    }
}

?>
</code>
登入後複製

SessionManager建構子主要用來連接Redis伺服器,使用session_set_save_handler函數設定session回呼函數,並呼叫session_start函數開啟session函數。因為本例中open、close和gc回呼函數的作用不是很大,所以直接傳回true。
在write回呼函數中,以session id 作為key,把session的資料作為value儲存到redis伺服器,設定session的過期時間為300秒。在read回呼函數重,以session ID 以key從redis伺服器讀取數據,並傳回此數據。而在destroy回呼函數重,則以session ID 作為key 從redis伺服器中刪除對應的session資料。

使用時,只需包含SessionManager類,然後實例化一個SessionManager物件。下面建立個session_set.php檔。輸入程式碼

<code><?php
    include("SessionManager.php");
    new SessionManager(); //开启session管理
    $_SESSION['username']='hezikuang';//创建session变量
?>
</code>
登入後複製

然後再建立一個session_get.php文件,輸入如下程式碼:

<code><?php
    include("SessionManager.php");
    new SessionManager(); //开启session管理
    echo $_SESSION['username'];
?>
</code>
登入後複製

可以存取session_get.php,看看是否成功。

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。

以上就介紹了session儲存的替代方法redis,包括了方面的內容,希望對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

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
C語言return的用法詳解 C語言return的用法詳解 Oct 07, 2023 am 10:58 AM

C語言return的用法有:1、對於傳回值類型為void的函數,可以使用return語句來提前結束函數的執行;2、對於傳回值型別不為void的函數,return語句的作用是將函數的執行結果傳回給呼叫者;3、提前結束函數的執行,在函數內部,我們可以使用return語句來提前結束函數的執行,即使函數並沒有回傳值。

SpringBoot Session怎麼設定會話超時 SpringBoot Session怎麼設定會話超時 May 15, 2023 pm 02:37 PM

問題發現springboot專案生產session-out逾時問題,描述下問題:在測試環境透過改動application.yaml配置session-out,經過設定不同時間驗證session-out配置生效,於是就直接設定了過期時間為8小時發布到了生產環境。然而中午接到客戶反應項目過期時間設定較短,半小時不操作就會話過期需要重複登陸。解決處理開發環境:springboot專案內建Tomcat,所以專案中application.yaml配置session-out是生效的。生產環境:生產環境發布是

php session刷新後沒有了怎麼辦 php session刷新後沒有了怎麼辦 Jan 18, 2023 pm 01:39 PM

php session刷新後沒有了的解決方法:1、透過「session_start();」開啟session;2、把所有的公共配置寫在一個php檔案內;3、變數名稱不能和陣列下標相同;4、在phpinfo裡面查看session資料的儲存路徑,並查看該檔案目錄下的sessio是否儲存成功即可。

function是什麼意思 function是什麼意思 Aug 04, 2023 am 10:33 AM

function是函數的意思,是一段具有特定功能的可重複使用的程式碼區塊,是程式的基本組成單元之一,可以接受輸入參數,執行特定的操作,並傳回結果,其目的是封裝一段可重複使用的程式碼,提高程式碼的可重複使用性和可維護性。

session失效怎麼解決 session失效怎麼解決 Oct 18, 2023 pm 05:19 PM

session失效通常是由於 session 的生存時間過期或伺服器關閉導致的。其解決方法:1、延長session的生存時間;2、使用持久化儲存;3、使用cookie;4、非同步更新session;5、使用會話管理中介軟體。

PHP Session 跨域問題的解決方法 PHP Session 跨域問題的解決方法 Oct 12, 2023 pm 03:00 PM

PHPSession跨域問題的解決方法在前後端分離的開發中,跨域請求已成為常態。在處理跨域問題時,我們通常會涉及session的使用和管理。然而,由於瀏覽器的同源策略限制,跨域情況下預設無法共享session。為了解決這個問題,我們需要採用一些技巧和方法來實現session的跨域共享。一、使用cookie跨域共享session最常

Springboot2 session設定超時時間無效怎麼解決 Springboot2 session設定超時時間無效怎麼解決 May 22, 2023 pm 01:49 PM

問題:今天專案中遇到了一個設定時間逾時的問題,按SpringBoot2的application.properties變更一直不生效。解決方案:server.*屬性用於控制SpringBoot所使用的嵌入式容器。 SpringBoot將使用ServletWebServerFactory實例之一來建立servlet容器的執行個體。這些類別使用server.*屬性來配置受控的servlet容器(tomcat,jetty等)。當應用程式作為war檔部署到Tomcat實例時,server.*屬性不適用。它們不適用,

Redis的分享session應用如何實現簡訊登入 Redis的分享session應用如何實現簡訊登入 Jun 03, 2023 pm 03:11 PM

1.基於session實作簡訊登入1.1簡訊登入流程圖1.2實作發送簡訊驗證碼前端請求說明:說明請求方式POST請求路徑/user/code請求參數phone(電話號碼)回傳值無後端介面實作:@Slf4j@ ServicepublicclassUserServiceImplextendsServiceImplimplementsIUserService{@OverridepublicResultsendCode(Stringphone,HttpSessionsession){//1.校驗手機號碼if

See all articles