首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

ThinkPHP 3.1 將 Session 儲存至 MySQL 資料庫完整設定教學

     編輯:PHP 綜合知識

ThinkPHP 預設將 Session 儲存在檔案系統,分散式部署或高併發場景下建議改用資料庫儲存。本文以 ThinkPHP 3.1.2 為例,示範完整設定流程。

步驟一:入口檔案設定自定義 Session 處理器

<?php
define('APP_DEBUG', true);
require '../ThinkPHP/ThinkPHP.php';
ini_set("session.save_handler", "user"); // 關鍵:告知 PHP 使用使用者定義處理器
?>

步驟二:配置檔設定資料庫連線與 Session 參數

<?php
return [
    'SHOW_PAGE_TRACE' => true,
    'DB_TYPE'   => 'mysql',
    'DB_HOST'   => 'localhost',
    'DB_NAME'   => 'thinkphp',
    'DB_USER'   => 'your_username',
    'DB_PWD'    => 'your_password',
    'DB_PORT'   => 3306,
    'DB_PREFIX' => 'think_',

    // Session 資料庫儲存設定
    'SESSION_OPTIONS' => [
        'type'   => 'db',      // 使用資料庫驅動
        'expire' => 1440,      // 過期秒數
    ],
    'SESSION_TABLE' => 'think_session', // 必須含前綴,否則找不到表
];
?>

步驟三:建立 Session 資料表

框架內建 SessionDb.class.php 提供 DDL,執行以下 SQL:

CREATE TABLE `think_session` (
    `session_id` varchar(255) NOT NULL,
    `session_expire` int(11) NOT NULL,
    `session_data` blob,
    UNIQUE KEY `session_id` (`session_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

步驟四:驗證運作

訪問專案首頁,然後在 phpMyAdmin 查看 think_session 表,應會出現一筆 Session 記錄。此後所有 session('name', 'value') 操作將自動讀寫資料庫。

原理說明

  • ini_set("session.save_handler", "user") 讓 PHP 呼叫 session_set_save_handler() 註冊的回調函數
  • ThinkPHP SessionDb 類別實作 open/close/read/write/destroy/gc 介面
  • 框架自動載入 SessionDb,無需手動引入

進階建議

  • 引擎選擇:高併發建議改用 InnoDB 支援行級鎖
  • 效能優化:session_id 已建立唯一索引,大量資料可考慮分表或改用 Redis/Memcached
  • 跨專案共享:多專案設定相同 SESSION_TABLE 與資料庫即可共享 Session

完成以上設定,ThinkPHP 即可無縫切換至資料庫 Session 儲存,支援叢集部署與 Session 持久化需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved