anullvalue/phpsessiondbpg

PHP8.2+ 使用 PostgreSQL 的 Session 处理器

v0.06 2024-03-04 23:18 UTC

This package is auto-updated.

Last update: 2024-09-05 00:18:38 UTC


README

许多解决方案/项目可能不需要使用数据库支持的 PHP 会话处理。但如果您的项目确实需要,并且您的项目无论如何都需要 PostgreSQL 9.5+,我为您编写了这个解决方案。

要求

  • PostgreSQL 9.5+(必须支持 "ON CONFLICT DO UPDATE")

  • PHP 8.2+

  • PostgreSQL 连接(通过 pg_connect,而不是 PDO)

  • 创建如下 "session_data" 表(表名(但不包括模式)可能不同;这里只是一个示例)

      CREATE TABLE public.session_data
      (
          id character varying NOT NULL,
          data character varying NOT NULL,
          touch_epoch integer NOT NULL,
          PRIMARY KEY (id)
      )
      WITH (
          OIDS = FALSE
      )
      TABLESPACE pg_default;
    
      ALTER TABLE public.session_data
          OWNER to postgres;
    
      CREATE INDEX session_data__id ON session_data(id);
      CREATE INDEX session_data__touch_epoch ON session_data(touch_epoch);
    

示例代码

$dbconn = pg_connect("your connection string here");
require_once 'PHPSessionDbPg.php'; // required only if you are not autoloading this library
$sessions_handler = new \aNullValue\PHPSessionDbPg\PHPSessionDbPg($dbconn,'session_data', 86400);
session_set_save_handler($sessions_handler, true);
session_name('MySessionName'); //optional
session_start();

$_SESSION['something'] = 'foo';
$_SESSION['something_else'] = 'bar';
echo session_id(),'<br/>',$_SESSION['something'],'<br />',$_SESSION['something_else'] ;

杂项

Inspired by https://github.com/iKevinShah/PGSessions