资讯专栏INFORMATION COLUMN

重写session的保存机制!

ybak / 1628人阅读

摘要:当我们所做的系统相对来说比较大的时候,可能会用到的共享机制如呵实现的共享,有很多的方法,但是,在中,个人认为首先要实现对的重写,才能进一步往下谈的共享如果实现的重写机制呢为我们提供了重写的函数,我们只需要应用即可操作数据库的对象构造函数,连

当我们所做的系统相对来说比较大的时候,可能会用到session的共享机制!如呵实现session的共享,有很多的方法,但是,在php中,个人认为首先要实现对session的重写,才能进一步往下谈session的共享!

如果实现session的重写机制呢?php为我们提供了重写的函数,session_set_save_handle()我们只需要应用即可!

_db = new Core_DB($config);
        }

        /**
         *  开始session机制时自动调用,即调用session_start()后马上回调该函数
         *
         *  @param string $sessionSavePath session文件的存储路径
         *  @param string $sessionName 默认为PHPSESSID
         *  @return boolan
         *  @access public
         */
        public function open($sessionSavePath, $sessionName)
        {
            /* 我们也可以在这里连接数据库 */
            return true;
        }

        /**
         *  在脚本执行完毕后,在write回调之后,进行调用
         *
         *  @access public
         *  @return boolean
         */
        public function close()
        {
            mysql_close($this->_db->_connectid);
            return true;
        }

        /**
         *  开启session机制后自动调用,在open回调之后马上调用
         *
         *  @param string $sessionID
         *  @return String
         *  @access public
         */
        public function read($sessionID)
        {
            $returnData = "";
            $sessionID = trim($sessionID);
            $sql = " select * from session where session_id="$sessionID" ";
            $sessionRecord = $this->_db->getToArray($sql);
            if(is_array($sessionRecord)) {
                $returnData = $sessionRecord["sessiondata"];
            }
            return $returnData;
        }

        /**
         *  当脚本执行完毕后,回调该函数
         *
         *  @param $sessionID string
         *  @param string $sessionData 要保存的session数据
         *  @return mixed
         *  @access public
         */
        public function write($sessionID, $sessionData) 
        {
            $result = false;
            $sessionID = trim($sessionID);
            $sessionData = trim($sessionData);
            if(!empty($sessionData)) {
                $addTime = date("Y-m-d H:i:s");
                $sql = " select * from session where session_id = "$sessionID" ";
                $sessionRecord = $this->_db->query($sql);//boolean
                if(count($sessionRecord)) {//存在更新
                    $sql = " update session set sessionData = "$sessionData", addtime = "$addTime" where session_id = "$sessionID" ";
                } else {//不存在,插入
                    $sql = " inset into session values ("$sessionID", "$sessionData", "$addTime") ";
                }
                $this->_db->query($sql);
            }
            return $result;
        }

        /**
         *  当调用session_destory()函数的时候,对该函数进行回调
         *
         *  @param string $sessioinID
         *  @return boolean
         *  @access public
         */
        public function destory($sessionID)
        {
            $result = false;
            $sql = " delete from session where session_id = "$sessionID" ";
            $result = $this->_db->query($sql);
            return $result;
        }

        /**
         *  session的垃圾回收机制,当session数据超过了静默时间,按照概率删除 默认概率:1/1000
         *
         *  @param $maxliefttime 静默时间,默认为1440秒
         *  @access public
         *  @return boolean
         */
        public function gc($maxlifetime)
        {
            $result = false;
            $expireTime = time()-$maxlifetime;
            $sql = " delete from session where addtime < $expireTime ";
            $result = $this->_db->query($sql);
            return $result;
        }
    }
    $session = new Session();
    session_set_save_handler(
                                array($session, "open"),
                                array($session, "close"),
                                array($session, "read"),
                                array($session, "write"),
                                array($session, "destory"),
                                array($session, "gc")
                            );
    session_start();
?


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/20800.html

相关文章

  • Cookie与Session区别

    摘要:的作用就是为了解决协议无状态的缺陷所作的努力。路径与域一起构成的作用范围。这种生命期为浏览器会话期的被称为会话。而机制采用的是一种在服务器端保持状态的解决方案。跨域名如今被普遍用在网络中,例如等。仅在他所在的域名内有效。 前言 本文分别对Cookie与Session做一个介绍和总结,并分别对两个知识点进行对比分析,让大家对Cookie和Session有一个更深入的了解,并对自己的开发工...

    kumfo 评论0 收藏0
  • Cookie/Session机制详解

    摘要:要跟踪该会话,必须引入一种机制。服务器检查该,以此来辨认用户状态。提示中保存中文只能编码。不推荐使用等中文编码,因为浏览器不一定支持,而且也不支持编码。这是由的隐私安全机制决定的。隐私安全机制能够禁止网站非法获取其他网站的。会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份...

    番茄西红柿 评论0 收藏0
  • 理解HTTP session原理及应用

    摘要:理解原理及应用一术语在我的经验里,这个词被滥用的程度大概仅次于,更加有趣的是与在某些语境下的含义是相同的。其中的作用就是为了解决协议无状态的缺陷所作出的努力。 理解HTTP session原理及应用 一、术语session 在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是transaction与session在某些语境下的含义是相同的。 ...

    dreamGong 评论0 收藏0
  • session和cookie

    摘要:的作用就是为了解决协议无状态的缺陷所作的努力。的内容主要包括名字,值,过期时间,路径和域。这种生命期为浏览器会话期的被称为会话。而机制采用的是一种在服务器端保持状态的解决方案。中的有效期默认分钟,也就是说,客户端超过分钟,当前就会失效。 会话控制是什么? cookie和session都是跟踪整个会话过程的技术手段。而会话,就是用户通过浏览器和服务器的一次通话。 为什么要有会话控制? 因...

    ruicbAndroid 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<