源码分享站 - 分享有用的

fatfree 展示 session.php源代码

返回 下载fatfree: 单独下载session.php源代码 - 下载整个fatfree源代码 - 类型:.php文件
  1. <?php
  2.  
  3. /*
  4.  
  5.         Copyright (c) 2009-2016 F3::Factory/Bong Cosca, All rights reserved.
  6.  
  7.         This file is part of the Fat-Free Framework (http://fatfreeframework.com).
  8.  
  9.         This is free software: you can redistribute it and/or modify it under the
  10.         terms of the GNU General Public License as published by the Free Software
  11.         Foundation, either version 3 of the License, or later.
  12.  
  13.         Fat-Free Framework is distributed in the hope that it will be useful,
  14.         but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  16.         General Public License for more details.
  17.  
  18.         You should have received a copy of the GNU General Public License along
  19.         with Fat-Free Framework.  If not, see <http://www.gnu.org/licenses/>.
  20.  
  21. */
  22.  
  23. namespace DB\SQL;
  24.  
  25. //! SQL-managed session handler
  26. class Session extends Mapper {
  27.  
  28.         protected
  29.                 //! Session ID
  30.                 $sid,
  31.                 //! Anti-CSRF token
  32.                 $_csrf,
  33.                 //! User agent
  34.                 $_agent,
  35.                 //! IP,
  36.                 $_ip,
  37.                 //! Suspect callback
  38.                 $onsuspect;
  39.  
  40.         /**
  41.         *       Open session
  42.         *       @return TRUE
  43.         *       @param $path string
  44.         *       @param $name string
  45.         **/
  46.         function open($path,$name) {
  47.                 return TRUE;
  48.         }
  49.  
  50.         /**
  51.         *       Close session
  52.         *       @return TRUE
  53.         **/
  54.         function close() {
  55.                 $this->reset();
  56.                 $this->sid=NULL;
  57.                 return TRUE;
  58.         }
  59.  
  60.         /**
  61.         *       Return session data in serialized format
  62.         *       @return string|FALSE
  63.         *       @param $id string
  64.         **/
  65.         function read($id) {
  66.                 $this->load(['session_id=?',$this->sid=$id]);
  67.                 if ($this->dry())
  68.                         return FALSE;
  69.                 if ($this->get('ip')!=$this->_ip || $this->get('agent')!=$this->_agent) {
  70.                         $fw=\Base::instance();
  71.                         if (!isset($this->onsuspect) ||
  72.                                 $fw->call($this->onsuspect,[$this,$id])===FALSE) {
  73.                                 //NB: `session_destroy` can't be called at that stage (`session_start` not completed)
  74.                                 $this->destroy($id);
  75.                                 $this->close();
  76.                                 $fw->clear('COOKIE.'.session_name());
  77.                                 $fw->error(403);
  78.                         }
  79.                 }
  80.                 return $this->get('data');
  81.         }
  82.  
  83.         /**
  84.         *       Write session data
  85.         *       @return TRUE
  86.         *       @param $id string
  87.         *       @param $data string
  88.         **/
  89.         function write($id,$data) {
  90.                 $this->set('session_id',$id);
  91.                 $this->set('data',$data);
  92.                 $this->set('ip',$this->_ip);
  93.                 $this->set('agent',$this->_agent);
  94.                 $this->set('stamp',time());
  95.                 $this->save();
  96.                 return TRUE;
  97.         }
  98.  
  99.         /**
  100.         *       Destroy session
  101.         *       @return TRUE
  102.         *       @param $id string
  103.         **/
  104.         function destroy($id) {
  105.                 $this->erase(['session_id=?',$id]);
  106.                 return TRUE;
  107.         }
  108.  
  109.         /**
  110.         *       Garbage collector
  111.         *       @return TRUE
  112.         *       @param $max int
  113.         **/
  114.         function cleanup($max) {
  115.                 $this->erase(['stamp+?<?',$max,time()]);
  116.                 return TRUE;
  117.         }
  118.  
  119.         /**
  120.         *       Return session id (if session has started)
  121.         *       @return string|NULL
  122.         **/
  123.         function sid() {
  124.                 return $this->sid;
  125.         }
  126.  
  127.         /**
  128.         *       Return anti-CSRF token
  129.         *       @return string
  130.         **/
  131.         function csrf() {
  132.                 return $this->_csrf;
  133.         }
  134.  
  135.         /**
  136.         *       Return IP address
  137.         *       @return string
  138.         **/
  139.         function ip() {
  140.                 return $this->_ip;
  141.         }
  142.  
  143.         /**
  144.         *       Return Unix timestamp
  145.         *       @return string|FALSE
  146.         **/
  147.         function stamp() {
  148.                 if (!$this->sid)
  149.                         session_start();
  150.                 return $this->dry()?FALSE:$this->get('stamp');
  151.         }
  152.  
  153.         /**
  154.         *       Return HTTP user agent
  155.         *       @return string
  156.         **/
  157.         function agent() {
  158.                 return $this->_agent;
  159.         }
  160.  
  161.         /**
  162.         *       Instantiate class
  163.         *       @param $db \DB\SQL
  164.         *       @param $table string
  165.         *       @param $force bool
  166.         *       @param $onsuspect callback
  167.         *       @param $key string
  168.         **/
  169.         function __construct(\DB\SQL $db,$table='sessions',$force=TRUE,$onsuspect=NULL,$key=NULL) {
  170.                 if ($force) {
  171.                         $eol="\n";
  172.                         $tab="\t";
  173.                         $db->exec(
  174.                                 (preg_match('/mssql|sqlsrv|sybase/',$db->driver())?
  175.                                         ('IF NOT EXISTS (SELECT * FROM sysobjects WHERE '.
  176.                                                 'name='.$db->quote($table).' AND xtype=\'U\') '.
  177.                                                 'CREATE TABLE dbo.'):
  178.                                         ('CREATE TABLE IF NOT EXISTS '.
  179.                                                 ((($name=$db->name())&&$db->driver()!='pgsql')?
  180.                                                         ($db->quotekey($name,FALSE).'.'):''))).
  181.                                 $db->quotekey($table,FALSE).' ('.$eol.
  182.                                         $tab.$db->quotekey('session_id').' VARCHAR(255),'.$eol.
  183.                                         $tab.$db->quotekey('data').' TEXT,'.$eol.
  184.                                         $tab.$db->quotekey('ip').' VARCHAR(45),'.$eol.
  185.                                         $tab.$db->quotekey('agent').' VARCHAR(300),'.$eol.
  186.                                         $tab.$db->quotekey('stamp').' INTEGER,'.$eol.
  187.                                         $tab.'PRIMARY KEY ('.$db->quotekey('session_id').')'.$eol.
  188.                                 ');'
  189.                         );
  190.                 }
  191.                 parent::__construct($db,$table);
  192.                 $this->onsuspect=$onsuspect;
  193.                 session_set_save_handler(
  194.                         [$this,'open'],
  195.                         [$this,'close'],
  196.                         [$this,'read'],
  197.                         [$this,'write'],
  198.                         [$this,'destroy'],
  199.                         [$this,'cleanup']
  200.                 );
  201.                 register_shutdown_function('session_commit');
  202.                 $fw=\Base::instance();
  203.                 $headers=$fw->get('HEADERS');
  204.                 $this->_csrf=$fw->get('SEED').'.'.$fw->hash(mt_rand());
  205.                 if ($key)
  206.                         $fw->set($key,$this->_csrf);
  207.                 $this->_agent=isset($headers['User-Agent'])?$headers['User-Agent']:'';
  208.                 $this->_ip=$fw->get('IP');
  209.         }
  210.  
  211. }
  212.  
单独下载 单独下载session.php源码 - 下载整个fatfree源程序
相关源码/软件:
TSA-Travel-Sentry-master-keys - TSA 主密钥的 3D 再现 2017-05-12
python3-cookbook - 《Python Cookbook》 3rd Edition Translatio 2017-05-12
isso - Disqus 替代 https://posativ.org/isso/ 2017-05-12
hologram - 降价基于文件系统的风格指南。 http://trulia.github.io... 2017-05-12
www.html5rocks.com - .......a 争创一流资源为 web 开发人员 2017-05-12
rolify - Role management library with resource scoping ... 2017-05-13
jquery-mockjax - JQuery Mockjax 插件提供了简单、 极其灵活的接口,以嘲笑或模拟 ajax 请求和响应 2017-05-13
yo - CLI 工具运行自耕农发电机 http://yeoman.io 2017-05-13
GrowingTextView - UITextView 增长/收缩与文本并开始滚动时的含量达到一定数量的行。类似于苹果在 SMS 应用... 2017-05-13
phan - 潘是 php 的静态分析器。潘倾向于避免误报,并试图证明不正确,而不是正确性。 2017-05-13
CRYENGINE - CRYENGINE 是由 Crytek 创建一个功能强大的实时游戏开发平台。 ... 2017-06-11
postal - 2017-06-11
reactide - Reactide 是反应 web 应用程序开发的第一个专用的 IDE。http://reactide... 2017-06-11
rkt - rkt 是为 Linux 的 pod 本机容器引擎。它是可组合、 安全和建筑标准。 2017-06-11
uWebSockets - 小小的 Websocket https://forest.webvrexpe... 2017-06-11
realworld - 真实的世界-动力反应、 角、 节点,Django,和更多的模范 fullstack Medium.c... 2017-06-11
goreplay - GoReplay 是用于捕获和重播活 HTTP 交通到测试环境以不断地测试您的系统与实际数据的开源工... 2017-06-10
pyenv - 简单的 Python 版本管理 2017-06-10
redux-saga - Redux 应用程序替代副作用模型 https://redux-saga.g... 2017-06-10
angular-starter - 2017-06-10

 返回顶部