Store PHP session data to code instances in the database. session data storage _ PHP Tutorial

Source: Internet
Author: User
Tags php session
Store PHP session data to code instances in the database and session data. Store PHP session data to code instances in the database. session data is stored on multiple websites in a development environment and requires different sessions. There are many solutions. However, this time, the PHP session data is also stored in the code instance in the database, and the session data is stored.

A development environment has multiple websites and requires different sessions. There are many solutions. However, this is also a big move, with data inventory to facilitate future expansion.

PostgreSQL
First, the database

--drop table php_sessioncreate unlogged table php_session(  sess_id varchar(32) primary key,  modify_time timestamp with time zone not null,  sess_data varchar(3000) default '');create index concurrently idx_php_session_modify_time on php_session(modify_time);--set_session(id, data)create or replace function set_session(varchar, varchar) returns void as $set_session$  with upsert as (    update php_session    set modify_time = current_timestamp, sess_data = $2    where sess_id = $1    returning 1  )  insert into php_session (sess_id, modify_time, sess_data)  select $1, current_timestamp, $2  where not exists (    select 1 from upsert  );$set_session$ language sql;--get_session(id)create or replace function get_session(varchar) returns varchar as $get_session$  select sess_data from php_session where sess_id = $1$get_session$ language sql;--del_sessioncreate or replace function del_session(varchar) returns void as $del_session$  delete from php_session where sess_id = $1$del_session$ language sql;--gc_sessioncreate or replace function gc_session() returns void as $del_session$  delete from php_session where modify_time < current_timestamp - interval '30 days'$del_session$ language sql;

And then the PHP part.

<?phpsession_set_save_handler(  function ($savePath, $sessionName) {//open    return true;  },  function () {//close    return true;  },  function ($id) {//read    $sql = "select get_session($1)";    $stmt = pg_query_params(SESSION_CONN, $sql, array($id));    $result = pg_fetch_row($stmt);        return $result[0];  },  function ($id, $data) {//write    $sql = "select set_session($1, $2)";    pg_query_params(SESSION_CONN, $sql, array($id, $data));    return true;  },  function ($id) {//destroy    $sql = "select del_session($1)";    pg_query_params(SESSION_CONN, $sql, array($id, $data));    return true;  },  function ($maxlifetime) {//gc    //php needn't control the global session gc     return true;  });register_shutdown_function('session_write_close');?>

Then you only need to call this before session_start.

As for SESSION_CONN, it is a constant defined by me, indicating a link to the session database.

MySQL
Here is an example of integrating more basic functions for MySQL:
Table structure:

 CREATE TABLE IF NOT EXISTS `sessioninfo` ( `sid` varchar(255) NOT NULL, `value` text NOT NULL, `expiration` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`sid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Session information is stored in the database class:

Class MySessionHandler implements SessionHandlerInterface {/*** @ access private * @ var object database connection */private $ _ dbLink; /*** @ access private * @ var string name of the table in which the session is saved */Private $ _ sessionTable; /*** @ access private * @ var string session name */private $ _ sessionName;/*** @ const expiration time */const SESSION_EXPIRE = 10; public function _ construct ($ dbLink, $ sessionTable) {if (! Is_object ($ dbLink) {return false;} $ this-> _ dbLink = $ dbLink; $ this-> _ sessionTable = $ sessionTable ;} /*** open * @ access public * @ param string $ session_save_path to save the session path * @ param string $ session_name session name * @ return integer */public function open ($ session_save_path, $ session_name) {$ this-> _ sessionName = $ session_name; return 0;}/*** close * @ access public * @ return integer */public fu Nction close () {return 0;}/*** close session * @ access public * @ param string $ session_id session ID * @ return string */public function read ($ session_id) {$ query = "SELECT value FROM {$ this-> _ sessionTable} WHERE sid = {$ session_id} AND UNIX_TIMESTAMP (expiration) + ". self: SESSION_EXPIRE. "> UNIX_TIMESTAMP (NOW ()"; $ result = $ this-> _ dbLink-> query ($ query); if (! Isset ($ value) | empty ($ value) {$ value = ""; return $ value ;} $ this-> _ dbLink-> query ("UPDATE {$ this-> _ sessionTable} SET expiration = CURRENT_TIMESTAMP () WHERE sid = {$ session_id }"); $ value = $ result-> fetch_array (); $ result-> free (); return $ value ['value'];} /*** write session ** @ access public * @ param string $ session_id session ID * @ param string $ session_data session data * @ return integer */public Function write ($ session_id, $ session_data) {$ query = "SELECT value FROM {$ this-> _ sessionTable} WHERE sid = '{$ session_id}' AND UNIX_TIMESTAMP (expiration) + ". self: SESSION_EXPIRE. "> UNIX_TIMESTAMP (NOW ()"; $ result = $ this-> _ dbLink-> query ($ query); $ result = $ result-> fetch_array (); if (! Empty ($ result )) {$ result = $ this-> _ dbLink-> query ("UPDATE {$ this-> _ sessionTable} SET value = {$ session_data} WHERE sid = {$ session_id }") ;} else {$ result = $ this-> _ dbLink-> query ("insert into {$ this-> _ sessionTable} (sid, value) VALUES ('{$ session_id }', '{$ session_data}') ");} if ($ result) {return 0;} else {return 1 ;}} /*** ecstasy session * @ access public * @ param string $ session_id session ID * @ return integer */public function destroy ($ session_id) {$ result = $ this-> _ dbLink-> query ("delete from {$ this-> _ sessionTable} WHERE sid = '{$ session_id }'"); if ($ result) {return 0;} else {return 1 ;}} /*** garbage collection ** @ access public * @ param string $ maxlifetime session maximum survival time * @ return integer */public function gc ($ maxlifetime) {$ result = $ this-> _ dbLink-> query ("delete from {$ this-> _ sessionTable} WHERE UNIX_TIMESTAMP (expiration) <UNIX_TIMESTAMP (NOW ())-". self: SESSION_EXPIRE); if ($ result) {return 0 ;}else {return 1 ;}}}
$dbLink = new mysqli("localhost", "root", "root", "test");$sessionTable = "sessioninfo"; $handler = new MySessionHandler($dbLink, $sessionTable);session_set_save_handler($handler);session_start();$_SESSION['name'] = "test";echo $_SESSION["name"];//session_destroy();

A development environment has multiple websites and requires different sessions. There are many solutions. But this time, too...

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.