Seditio Source
Root |
./othercms/elxis_5.3_atlas_rev2452/includes/libraries/elxis/database/tables/session.db.php
<?php
/**
* @version        $Id: session.db.php 1777 2016-02-11 19:37:00Z sannosi $
* @package        Elxis
* @subpackage    Database
* @copyright    Copyright (c) 2006-2016 Elxis CMS (http://www.elxis.org). All rights reserved.
* @license        Elxis Public License ( http://www.elxis.org/elxis-public-license.html )
* @author        Elxis Team ( http://www.elxis.org )
* @description     Elxis CMS is free software. Read the license for copyright notices and details
*/

defined('_ELXIS_') or die ('Direct access to this location is not allowed.');


class
sessionDbTable extends elxisDbTable {


   
/*************************************************/
    /* CONSTRUCT PARENT CLASS AND SET INITIAL VALUES */
    /*************************************************/
   
public function __construct() {
       
parent::__construct('#__session', 'session_id');

       
$this->columns = array(
           
'session_id' => array('type' => 'string', 'value' => null),
           
'uid' => array('type' => 'integer', 'value' => 0),
           
'gid' => array('type' => 'integer', 'value' => 7),
           
'login_method' => array('type' => 'string', 'value' => null),
           
'first_activity' => array('type' => 'integer', 'value' => null),
           
'last_activity' => array('type' => 'integer', 'value' => null),
           
'clicks' => array('type' => 'integer', 'value' => 0),
           
'current_page' => array('type' => 'string', 'value' => null),
           
'ip_address' => array('type' => 'string', 'value' => null),
           
'user_agent' => array('type' => 'string', 'value' => null),
           
'session_data' => array('type' => 'string', 'value' => null)
        );

       
$ts = eFactory::getDate()->getTS();
       
$this->setValue('current_page', eFactory::getURI()->getElxisUri());
       
$this->setValue('first_activity', $ts);
       
$this->setValue('last_activity', $ts);
    }


   
/**********************/
    /* CHECK ROW VALIDITY */
    /**********************/
   
public function check() {
        if (
trim($this->session_id) == '') {
           
$this->errorMsg = 'Session id can not be empty!';
            return
false;
        }
        if (
$this->gid < 1) {
           
$this->errorMsg = 'Group id value is invalid!';
            return
false;
        }

        if (
trim($this->current_page) != '') {
           
$this->current_page = trim(filter_var($this->current_page, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW));
           
$pat = "#([\']|[\(]|[\)]|[\"]|[\$]|[\#]|[\<]|[\>]|[\*]|[\~]|[\`]|[\^]|[\|]|[\{]|[\}]|[\\\])#u";
           
$this->current_page = eUTF::trim(preg_replace($pat, '', $this->current_page));

            if (
eUTF::strlen($this->current_page) > 255) {
               
$this->current_page = eUTF::substr($this->current_page, 0, 254);
            }
        }

        if (
trim($this->login_method) != '') {
            if (!
file_exists(ELXIS_PATH.'/components/com_user/auth/'.$this->login_method.'/'.$this->login_method.'.auth.php')) {
               
$this->errorMsg = 'Invalid authentication method!';
                return
false;
            }
        }

        return
true;
    }


   
/**********************/
    /* PURGE OLD SESSIONS */
    /**********************/
   
public function purge($maxLifetime = 1440) {
       
$past = eFactory::getDate()->getTS() - (int)$maxLifetime;
       
$sql = "DELETE FROM ".$this->db->quoteId($this->table)." WHERE ".$this->db->quoteId('last_activity')." < :past";
       
$stmt = $this->db->prepare($sql);
       
$stmt->bindParam(':past', $past, PDO::PARAM_INT);
        return
$stmt->execute();
    }


   
/****************************************/
    /* UPDATE LAST ACTIVITY TIME AND OTHERS */
    /****************************************/
   
public function refresh() {
       
$this->current_page = eFactory::getURI()->getUriString();
        if (
eUTF::strlen($this->current_page) > 255) {
           
$this->current_page = eUTF::substr($this->current_page, 0, 254);
        }
       
$this->clicks++;
       
$this->last_activity = eFactory::getDate()->getTS();
        return
$this->update();
    }


   
/***********************************************************/
    /* DELETE OLD SESSION FROM DB (AFTER REGENERATE/FORCE NEW) */
    /***********************************************************/
   
public function removeOld($old_session_id) {
       
$sql = "DELETE FROM ".$this->db->quoteId($this->table)." WHERE ".$this->db->quoteId('session_id')." = :xsess";
       
$stmt = $this->db->prepare($sql);
       
$stmt->bindParam(':xsess', $old_session_id, PDO::PARAM_STR);
        return
$stmt->execute();
    }

}

?>