加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP编程:PHP将session信息存储到数据库的类实例

发布时间:2020-12-13 02:26:48 所属栏目:PHP教程 来源:网络整理
导读:《PHP将session信息存储到数据库的类实例》要点: 本文介绍了PHP将session信息存储到数据库的类实例,希望对您有用。如果有疑问,可以联系我们。 PHP学习 本篇章节讲解PHP将session信息存储到数据库的类.供大家参考研究.具体分析如下: SessionHandl

《PHP将session信息存储到数据库的类实例》要点:
本文介绍了PHP将session信息存储到数据库的类实例,希望对您有用。如果有疑问,可以联系我们。

PHP学习本篇章节讲解PHP将session信息存储到数据库的类.分享给大家供大家参考.具体分析如下:

SessionHandlerInterface接口是PHP内置的接口,直接实现就行了
具体可以看php手册关于session_set_save_handler函数的解释!

PHP代码如下:

代码如下:

/**
* session信息存储到数据库的类
* 表结构:
* 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;
*/
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","test");
$sessionTable = "sessioninfo";
$handler = new MySessionHandler($dbLink,$sessionTable);
session_set_save_handler($handler);
session_start();
$_SESSION['name'] = "test";
echo $_SESSION["name"];
//session_destroy();

希望本文所述对大家的php程序设计有所赞助.

欢迎参与《PHP将session信息存储到数据库的类实例》讨论,分享您的想法,编程之家 52php.cn为您提供专业教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读