中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

將PHP的session數據存儲到數據庫中的代碼實例
來源:易賢網 閱讀:1182 次 日期:2016-08-16 15:24:41
溫馨提示:易賢網小編為您整理了“將PHP的session數據存儲到數據庫中的代碼實例”,方便廣大網友查閱!

這里我們將分享兩個將PHP的session數據存儲到數據庫中的代碼實例,分別針對PostgreSQL與MySQL,需要的朋友可以參考下

一個開發環境有多個網站,需要使用不同的session,解決方案很多。不過這次也高大上一把,用數據庫存,方便以后擴展。

PostgreSQL版

首先是數據庫的部分

--drop table php_session

create 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_session

create or replace function del_session(varchar) returns void as $del_session$

  delete from php_session where sess_id = $1

$del_session$ language sql;

--gc_session

create 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;

然后是PHP的部分

<?php

session_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');

?>

然后只要在session_start之前調用這個就可以了

至于SESSION_CONN,那是我定義的一個常量,表示一個指向session數據庫的鏈接而已。

MySQL版

再總結一個針對MySQL的集成更多基礎功能的例子:

表結構:

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信息存儲到數據庫的類:

class MySessionHandler implements SessionHandlerInterface {

  /**

  * @access private

  * @var object 數據庫連接

  */

  private $_dbLink;

  /**

  * @access private

  * @var string 保存session的表名

  */

  Private $_sessionTable;

  /**

  * @access private

  * @var string session名

  */

  private $_sessionName;

  /**

  * @const 過期時間

  */

  const SESSION_EXPIRE = 10;

  public function __construct($dbLink, $sessionTable) {

    if(!is_object($dbLink)) {

      return false;

    }

    $this->_dbLink = $dbLink;

    $this->_sessionTable = $sessionTable;

  }

  /**

  * 打開

  * @access public

  * @param string $session_save_path 保存session的路徑

  * @param string $session_name session名

  * @return integer

  */

  public function open($session_save_path, $session_name) {

    $this->_sessionName = $session_name;

    return 0;

  }

  /**

  * 關閉

  * @access public

  * @return integer

  */

  public function close() {

    return 0;

  }

  /**

  * 關閉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'];

  }

  /**

  * 寫入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;

    }    

  }

  /**

  * 銷魂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;

    }

  }

  /**

  * 垃圾回收

  * @access public

  * @param string $maxlifetime session 最長生存時間

  * @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();

更多信息請查看網絡編程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
狠狠狠色丁香婷婷综合激情| 欧美日韩在线视频首页| 在线欧美三区| 在线播放日韩| 国内揄拍国内精品久久| 国产精品久久久久久久久久妞妞 | 欧美日本韩国一区二区三区| 亚洲一区二区免费视频| 99视频一区| 亚洲美女一区| 99re66热这里只有精品4| 亚洲国产日韩一区| 在线观看的日韩av| 亚洲欧洲一级| 欧美少妇一区二区| 欧美日韩在线另类| 国产精品a久久久久| 美玉足脚交一区二区三区图片| 久久免费99精品久久久久久| 欧美视频一区二区三区…| 久久综合色综合88| 欧美欧美全黄| 国产日韩精品一区| 欧美一区二区私人影院日本| 国产精品v欧美精品∨日韩| 欧美高清在线精品一区| 欧美大片免费| 国产欧美亚洲一区| 欲色影视综合吧| 亚洲精品综合| 在线视频亚洲| 久久久久久久成人| 久久av免费一区| 牛牛国产精品| 国产精品久久久久9999吃药| 国产日韩在线不卡| 国语对白精品一区二区| 亚洲日韩视频| 亚洲私人影院| 亚洲韩日在线| 亚洲人成在线观看| 国产一区二区三区高清在线观看| 狠狠网亚洲精品| 亚洲精品小视频在线观看| 欧美激情一区二区在线| 国产精品免费一区二区三区观看 | 亚洲精品美女91| 久久精品91| 欧美激情精品| 国产亚洲综合精品| 国产精品免费在线| 亚洲电影免费观看高清完整版在线观看| 日韩视频免费观看高清在线视频| 久久久亚洲国产天美传媒修理工 | 亚洲第一色在线| 亚洲国产精品成人精品| 日韩网站在线观看| 日韩一级精品| 国产精品一区二区久久| 国产亚洲精品v| 欧美一区二区三区在线免费观看| 午夜视频一区在线观看| 国产视频久久久久| 亚洲精品国产拍免费91在线| 久久久7777| 狠狠狠色丁香婷婷综合久久五月| 一区二区国产精品| 欧美精品成人91久久久久久久| 国产亚洲精品bt天堂精选| 亚洲视频久久| 久久国产日韩| 99re热精品| 国产精品日本精品| 欧美一级午夜免费电影| 国产精品久久久亚洲一区| 欧美一区二区三区在| 欧美大片在线观看| 国产精品99久久久久久宅男| 国产情人节一区| 久久九九免费视频| 狠狠综合久久av一区二区小说 | 欧美影片第一页| 欧美日本国产视频| 国产免费成人av| 欧美日韩黄视频| 亚洲一级免费视频| 亚洲国产精品久久久久秋霞蜜臀 | 欧美一区二区视频观看视频| 欧美日韩一区二区在线观看视频 | 久久久综合免费视频| 国产区二精品视| 欧美精品免费在线| 亚洲一区在线免费| 久久久久亚洲综合| 亚洲欧洲日本一区二区三区| 欧美激情bt| 久久亚洲私人国产精品va| 在线观看视频亚洲| 国产日韩欧美91| 久久久精品一区| 亚洲国产裸拍裸体视频在线观看乱了中文 | …久久精品99久久香蕉国产| 国产嫩草一区二区三区在线观看| 久久国产夜色精品鲁鲁99| 国产亚洲欧洲| 国内外成人免费视频| 欧美一区二区三区在线看| 亚洲人成精品久久久久| 国产自产精品| 欧美日韩国产探花| 欧美国产日韩在线| 久久久国产一区二区| 国产精品久久国产精麻豆99网站| 欧美高清视频一区二区| 一本色道久久| 午夜精品亚洲一区二区三区嫩草| 亚洲精品乱码久久久久久蜜桃91| 久久久欧美一区二区| 亚洲精品国产精品国自产观看| 国产精品卡一卡二| 免费观看成人www动漫视频| 亚洲欧美一区二区在线观看| 在线不卡免费欧美| 欧美精品导航| 国产精品一区二区在线观看网站 | 激情久久综合| 亚洲黄色在线观看| 韩国三级电影一区二区| 国产日韩在线一区| 国产精品私人影院| 免费永久网站黄欧美| 欧美日韩成人免费| 国产综合自拍| 国产精品v片在线观看不卡| 国产一区二区三区在线观看网站| 欧美丰满高潮xxxx喷水动漫| 欧美精品综合| 欧美日韩精品不卡| 欧美xxx成人| 欧美色图一区二区三区| 欧美一区二区三区四区在线 | 欧美中文字幕在线| 美国三级日本三级久久99| 亚洲欧美国产高清| 欧美呦呦网站| 久久久国产视频91| 久久精品成人| 欧美在线播放一区| 欧美日韩精品综合| 久久美女性网| 欧美精品国产| 国产一区二区日韩精品| 国产精品狠色婷| 国内久久婷婷综合| 国产精品乱码人人做人人爱| 黄色成人91| 久热精品视频在线观看| 午夜视频久久久| 欧美高清成人| 在线精品国精品国产尤物884a| 亚洲电影有码| 欧美成人精品三级在线观看| 国产色视频一区| 亚洲欧美日韩人成在线播放| 欧美有码在线观看视频| 国产精品午夜在线| 亚洲美女中文字幕| 亚洲狠狠丁香婷婷综合久久久| 亚洲视频一起| 国产精品videosex极品| 99在线精品观看| 亚洲欧美在线aaa| 国产精品一区二区三区成人| 禁久久精品乱码| 欧美凹凸一区二区三区视频| 欧美三级精品| 在线观看三级视频欧美| 久久午夜激情| 国产欧美日韩三区| 亚洲国产美女精品久久久久∴| 午夜精品久久久99热福利| 国产小视频国产精品| 亚洲精品久久久一区二区三区| 在线午夜精品| 欧美福利一区二区| 国产精品久久999| 亚洲午夜久久久久久久久电影院| 欧美日韩成人网| 午夜精品成人在线视频| 免费亚洲一区| 亚洲欧美精品suv| 欧美日韩国产欧| 精东粉嫩av免费一区二区三区| 欧美福利在线| 亚洲美女中文字幕| 欧美午夜精品一区二区三区| 亚洲欧洲一区二区三区在线观看| 欧美午夜电影完整版| 亚洲无亚洲人成网站77777 | 国产日韩欧美电影在线观看|