亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

php把session存儲在數據庫性能如何?。?/h1>

php把session存儲在數據庫性能如何???

PHP
慕無忌1623718 2019-03-18 09:00:19
SessionHandler.php文件內容如下 <?php namespace Dry\Base; class SessionHandler{ private $pdo = null; private $lifeTime = 1440; public function __construct($pdo) { $this->pdo = $pdo; $this->lifeTime = get_cfg_var('session.gc_maxlifetime'); session_set_save_handler( array($this, 'open'), array($this, 'close'), array($this, 'read'), array($this, 'write'), array($this, 'destroy'), array($this, 'gc') ); register_shutdown_function('session_write_close'); } public function open($save_path, $session_name) { return true; } public function close() { return true; } public function read($session_id) { $time = date('Y-m-d H:i:s'); $sql = "select session_data from session_handler where session_id='{$session_id}' and session_expires>'{$time}' limit 1"; $sm = $this->pdo->prepare($sql); $sm->execute(); if($sm->rowCount()){ $result = $sm->fetch(); return $result['session_data']; } else{ return ''; } } public function write($session_id, $session_data) { $time = date('Y-m-d H:i:s', time()+$this->lifeTime); $sql = "select count(1) as total from session_handler where session_id='{$session_id}' limit 1"; $sm = $this->pdo->prepare($sql); $sm->execute(); if($sm->fetchColumn()){ $sql="update session_handler set session_data='{$session_data}',session_expires='{$time}' where session_id='{$session_id}'"; } else{ $sql="insert into session_handler(session_id,session_data,session_expires) values('{$session_id}','{$session_data}','{$time}')"; } $sm = $this->pdo->prepare($sql); $sm->execute(); return true; } public function destroy($session_id) { $sql = "delete from session_handler where session_id='{$session_id}'"; $sm = $this->pdo->prepare($sql); $sm->execute(); return true; } public function gc($maxlifetime) { $time = date('Y-m-d H:i:s', time()-$maxlifetime); $sql = "delete from session_handler where session_expires<'{$time}'"; $sm = $this->pdo->prepare($sql); $sm->execute(); return true; } } ?> test.php文件內容如下 <?php require_once('SessionHandler.php'); use Dry\Base\SessionHandler; $pdo = new PDO('mysql:host=192.168.1.20;dbname=test;port=3306', 'root', '1234', array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_PERSISTENT => false, PDO::MYSQL_ATTR_INIT_COMMAND => 'set names utf8', PDO::ATTR_ORACLE_NULLS => PDO::NULL_TO_STRING, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC )); new SessionHandler($pdo); session_start(); $_SESSION['name'] = 'test'; echo $_SESSION['name']; ?> session_handler表結構如下 CREATE TABLE `session_handler` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `session_id` varchar(64) NOT NULL, `session_data` mediumtext, `session_expires` datetime NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `session_id` (`session_id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
查看完整描述

5 回答

?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

不推薦存數據庫中,假如站點訪問量大的時候,對數據庫會頻繁寫入,頻繁讀取,從而影響數據庫性能。一般用redis memcache存更好些。而且維護過期時間等也方便。設置key過期時間就好。

查看完整回答
反對 回復 2019-03-18
?
一只名叫tom的貓

TA貢獻1906條經驗 獲得超3個贊

存redis這些緩存應用就可以了,讀取高效,自動過期

查看完整回答
反對 回復 2019-03-18
  • 5 回答
  • 0 關注
  • 486 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號