Jump to content
Nerdmonkey

Classe para gerenciar sessões

Recommended Posts

Boa noite a todos.

Avaliando a classe abaixo saberiam dizer o porque dessa mensagem de erro:

 

Fatal error: Cannot use object of type stdClass as array in D:\Server\public_html\Session.class.php on line 92

 

 

A linha 92 contém esse trecho de código:

 

'siteviews_users' => $this->traffic['siteviews_users'] + 1,

 

 

 

<?php

/**
* Class Session
* This class is responsible for all sessions, users online and traffic
* She's responsible for yourself, just call the object for it and let she work
*
* @author Samuel dos Santos
*/
class Session extends Read
{
/** @var datetime */
private $date;

/** @var int */
private $cache;

/** @var mixed */
private $traffic;

/** @var string */
private $browser;

/** @var mixed */
private $cookie;

/** @var mixed */
private $create;

/** @var mixed */
private $update;

public function __construct($cache = null)
{
// Enable to create new sessions
session_start();
// Check the session status
$this->checkSession($cache);
}

/**
* @param null $cache
*/
private function checkSession($cache = null)
{
// Actual date
$this->date = date('Y-m-d');
// Value for navigator cache
$this->cache = ((int) $cache ? $cache : 20);
// Manage sessions actions
$this->checkObjectSession();
// Cleanup this @var from memory system
$this->date = null;
}

/**
* Manager the object session for user navigate
*/
private function checkObjectSession()
{
if(empty($_SESSION['useronline'])):
// When session not exist, we create it and insert in database
$this->setTraffic();
// Initialize sessions
$this->setSession();
else:
// Some for debug
$this->setTraffic();

// Update sessions
$this->sessionUpdate();
endif;
}

/**
* Check and inset the traffic in table ws_siteviews
*/
private function setTraffic()
{
$this->getTraffic();
$this->create = new Create;
$this->update = new Update;

if(!$this->traffic):
// If initialize, we have a first visit of a day
$this->create->ExeCreate('ws_siteviews', ['siteviews_date' => $this->date, 'siteviews_users' => 1, 'siteviews_views' => 1, 'siteviews_pages' => 1]);
else:
if(!$this->getCookie()):
$this->update->ExeUpdate(
'ws_siteviews',
[
'siteviews_users' => $this->traffic['siteviews_users'] + 1,
'siteviews_views' => $this->traffic['siteviews_views'] + 1,
'siteviews_pages' => $this->traffic['siteviews_pages'] + 1
],
'WHERE siteviews_date = :date',
"date={$this->date}"
);
else:
$this->update->ExeUpdate('ws_siteviews', ['siteviews_views' => $this->traffic['siteviews_views'] + 1, 'siteviews_pages' => $this->traffic['siteviews_pages'] + 1], 'WHERE siteviews_date = :date', "date={$this->date}");
endif;
endif;
}

/**
* Set all attributes for our session
*/
private function setSession()
{
$_SESSION['useronline'] = [
'online_session' => session_id(),
'online_startviews' => date('Y-m-d H:is:s'),
'online_endview' => date('Y-m-d H:is:s', strtotime("+{$this->cache}minutes")),
'online_ip' => filter_input(INPUT_SERVER, 'REMOTE_ADDR', FILTER_VALIDATE_IP),
'online_url' => filter_input(INPUT_SERVER, 'REQUEST_URI', FILTER_DEFAULT),
'online_agent' => filter_input(INPUT_SERVER, 'HTTP_USER_AGENT', FILTER_DEFAULT)
];
}

/**
* Update user session
*/
private function sessionUpdate()
{
$_SESSION['useronline']['online_endview'] = date('Y-m-d H:is:s', strtotime("+{$this->cache}minutes"));
$_SESSION['useronline']['online_url'] = filter_input(INPUT_SERVER, 'REQUEST_URI', FILTER_DEFAULT);
}

/**
* Read table ws_siteviews for obtain a traffic for current day
* @return boolean
*/
private function getTraffic()
{
// Read the table ws_siteviews searching for rows with today's date
parent::ExeRead('ws_siteviews', 'WHERE siteviews_date = :date', "date={$this->date}");
// The next method, is check if this query have any results and store it in @var mixed $traffic
$this->thisResultTraffic();
}

/**
* Check if query got any result for interaction with it
* @return boolean
*/
private function thisResultTraffic()
{
if(parent::getRowCount()):
// Store a unique row value
$this->traffic = parent::getResult()[0];
endif;
}

/**
* Obtain a cookie value
*/
private function getCookie()
{
// Store cookie value for actual user
$this->cookie = filter_input(INPUT_COOKIE, 'useronline', FILTER_DEFAULT);
// Next method, will check if this cookie is empty or not
$this->thisResultCookie();
// Create a new cookie for user navigate
setcookie('useronline', base64_encode('samueldossantos'), time() + 86400);
}

/**
* Check the cookie value
* @return boolean
*/
private function thisResultCookie()
{
if($this->cookie):
// When exist
return true;
else:
// When not exst
return false;
endif;
}
}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Evandrorussi
      Olá pessoal,
       
      Trabalho com PHP a uns 6 anos e me deparei com um problema de session que nunca ouvi falar, pelo menos não encontrei nada pela internet desse tipo. Tenho um servidor dedicado no Google Cloud e o site tem um sistema de login via session. O problema é que a session funciona aleatoriamente, tem hora que não funciona, o cliente troca de tela e o servidor perde a session e pede pra logar novamente, isso não acontece com todos usuários, comigo por exemplo não acontece.
      O cara que trabalha comigo não ocorria esse problema mas agora começou a acontecer e ele reparou que com guia anônima o problema não ocorre.
       
      Caso alguém pergunte, session_start() está iniciando em todas as páginas.
       
      Abraço
       
       
    • By darkside88
      Esse é meu código porém não está exibindo dentro dos inputs as informações recuperadas da página EDITAR nos campos! <?php //ini_set('display_errors', 0); include('conexao/connection.php'); session_start(); $cli_codigo = intval($_GET['usuario']); if(isset($_POST['confirma'])){     //Registrar Dados     if(!isset($_SESSION))         session_start();       foreach($_POST as $chave=>$valor)         $_SESSION[$chave] = $con->real_escape_string($valor);       //Validar     if (strlen($_SESSION['nome']) == 0)     $erro[] = "Preencha o campo Nome";            if (strlen($_SESSION['wpp']) == 0)     $erro[] = "Preencha o campo WhatsApp";       if (strtotime($_SESSION['dt1']) > strtotime($_SESSION['dt2']) || strtotime($_SESSION['dt1']) == strtotime($_SESSION['dt2']))     $erro[] = "A Data de Criação no IPTV deve ser menor que a Data de Vencimento no IPTV ou não podem ser iguais";           //Inserir       if(count($erro) == 0){         $sql_code = "UPDATE cadastrocliente set             nomecli = '$_SESSION[nome]',             email = '$_SESSION',             wpp = '$_SESSION[wpp]',             srv = '$_SESSION[srv]',              srv = '$_SESSION[dt1]',                         dataVI = '$_SESSION[dt2]',             app = '$_SESSION[app]'             WHERE nomecli = '$cli_codigo'";         $confirma = $con->query($sql_code) or die($con->error);         if($confirma){             unset(                 $_SESSION[nome],                 $_SESSION,                 $_SESSION[wpp],                 $_SESSION[srv],                 $_SESSION[dt1],                 $_SESSION[dt2],                 $_SESSION[app]                          );                         header("Location: index.php?p=listarcliente");         }else{             $erro[] = $confirma;         }     }else{         $sql_code = "SELECT * FROM cadastrocliente WHERE id_cliente= '$cli_codigo'";         $sql_query = $con->query($sql_code) or die($con->error);         $linha = $sql_query->fetch_assoc();           $_SESSION[nome] = $linha['nomeCli'];         $_SESSION = $linha['email'];         $_SESSION[wpp] = $linha['wpp'];         $_SESSION[srv] = $linha['srv'];         $_SESSION[srv] = $linha['dt1'];         $_SESSION[dt2] = $linha['dt2'];         $_SESSION[app]  = $linha['app'];     } }   ?> <?php   if (count($erro) > 0) {     echo "<div class='alert alert-danger'>";     foreach ($erro as $valor)         echo "$valor <br>";          echo "</div>";}  ?> <form class="container-fluid" action="index.php?p=editar&usuario=<?php echo $cli_codigo?>" method="POST">     <label for="nome">Nome do Cliente</label>     <input type="text" name="nome" value="<?php echo $_SESSION[nome]?>" class="form-control" placeholder="Nome Completo do Cliente">     <label for="email">Email</label>     <input type="email" name="email" value="<?php echo $_SESSION?>" class="form-control" placeholder="nome@exemplo.com">     <label for="mensagem">WhatsApp</label>     <input type="text" name="wpp" value="<?php echo $_SESSION[wpp]?>" class="form-control" placeholder="Digite o seu Whatsapp (DD) 9 XXXX-XXXX"         id="celular" name="mensagem">     <script type="text/javascript">     $("#telefone,#celular").mask("(00) 0 0000-0000");     </script>     <label for="srv">Servidor do Cliente</label>     <input type="text" name="srv" value="<?php echo $_SESSION[wpp]?>" class="form-control" placeholder="Servidor do Cliente">     <label for="dt1">Data de Criação no IPTV</label>     <input type="date" value="<?php echo $_SESSION[dt1]?>" data- provide="datepicker" name="dt1" class="form-control">     <label for="dt2">Data de Vencimento no IPTV</label>     <input type="date" name="dt2" value="<?php echo $_SESSION[dt2]?>" class="form-control">     <label for="app">App doCliente</label>     <input type="text" name="app" value="<?php echo $_SESSION[app]?>" class="form-control" placeholder="App do Cliente">     <input type="submit" name="confirma" class="form-control btn btn-dark mt-4 mb-4 " value="Cadastrar">   </form>
    • By fabina
      Ola tenho um questionario feito  em php  guardo o valor das respostas no banco   e depois    tem um resultado por cada area  que ele respondeu ate ai responde  super bem mais quando  duas pessoas começam a fazer  ele  perde o valor da session e nao  exibe o valor para o meu usuario ,ou as vezes troca o nome do usuario x para y 
    • By Redschenko
      Boa tarde.

      Tenho um sistema onde o usuário faz login e grava a sessão
      $_SESSION['LOGADO'] = true; Nesta página com acesso restrito verifico se o usuário está logado. Caso não, redireciono para página de login.
       
      if(!isset ($_SESSION['LOGADO']) == true) { header("Location:../../index.php?t=d&m=4"); exit(); } Isto estava funcionando corretamente, porém após passar a utilizar https, na página com acesso restrito a verificação ($_SESSION['LOGADO'] == true) está sempre redirecionando para a página de login.
      Alguém sabe se há alguma particularidade para casos onde seja HTTPS?
       
      Agradeço a atenção
      Rodrigo de Oliveira
    • By brunoogm
      Pessoal tenho o seguinte codigo:
       
      <!DOCTYPE html>
      <html lang="pt-br">
          <head>
              <meta charset="utf-8">
              <meta http-equiv="X-UA-Compatible" content="IE=edge">
              <meta name="viewport" content="width=device-width, initial-scale=1">
              <title>KADAM - Menu Digital</title>
              <link rel="icon" href="../imagens/img.png" type="image.png" />
              <link href="../css/bootstrap.min.css" rel="stylesheet">
              <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
              <link rel='stylesheet' href='https://use.fontawesome.com/releases/v5.7.0/css/all.css' integrity='sha384-lZN37f5QGtY3VHgisS14W3ExzMWZxybE1SJSEsQp9S+oqd12jhcu+A56Ebc1zFSJ' crossorigin='anonymous'>
              <script src="../js/bootstrap.min.js"></script>
              
              <script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
              <script src="sweetalert2.all.min.js"></script>
              <script src="https://cdn.jsdelivr.net/npm/promise-polyfill"></script>
          </head>
          <body>
              <div class="container theme-showcase" role="main">

      <?php
      session_start();
      include_once("php/conexao.php");

      $idPessoa = $_SESSION['id_pessoa'];
      $id_cliente = $_SESSION['id_user']; 
      $cont = $_SESSION['cont'];
       
      echo "ID cliente: ".$id_cliente."<br>";
      echo "Cont: ".$cont."<br>";
       
      $endereco = filter_input(INPUT_POST, 'endereco');
      $total = filter_input(INPUT_POST, 'Total');
      $metodopag = filter_input(INPUT_POST, 'pagamento');
      $troco = filter_input(INPUT_POST, 'troco');
      $cpfnota = filter_input(INPUT_POST, 'cpfnota');
      $query= "Select * from enderecocliente WHERE CodigoEndereco = $endereco";
      $resulta = mysqli_query($conectar, $query);
      $resultado = mysqli_fetch_array($resulta);

      //echo "Cod Endereco: ".$endereco."<br>";
      //echo "Nome Cidade: ".$resultado['NomeCidade']."<br>";
      //echo "Endereco: ".$resultado['Endereco']."<br>";
      //echo "Cep: ".$resultado['CEP']."<br>";
      //echo "numero: ".$resultado['Numero']."<br>";
      //echo "Cod Endereco: ".$resultado['Bairro']."<br>";
      //echo "Cod Endereco: ".$resultado['Estado']."<br>";
      //echo "Cod Endereco: ".$metodopag."<br>";
      //echo "Total: ".$total."<br>";

      $query ="UPDATE comanda SET ValorTotal= '$total', CodigoEndereco= $resultado[CodigoEndereco], CodigoMetodoPag = $metodopag, CodigoSituacao = '3' WHERE CodigoComanda = $cont";
      $resultado = @mysqli_query($conectar, $query);
      $query2 ="INSERT INTO pagamento  (CodigoComanda, CpfNota, CodigoMetodoPag, Troco, ValorTotal) VALUES ('$cont', '$cpfnota', '$metodopag', '$troco', '$total')";
      $resultado2 = @mysqli_query($conectar, $query2);
      $_SESSION['cont'] = 0;
      if (mysqli_affected_rows($conectar)) {
              
      ?>
      <script>
          swal({
              
              closeOnEsc: false,
              closeOnClickOutside: false,
              title: "Sucesso!",
              text: "Parabéns! Pedido enviado com sucesso!",
              icon: "success",
              button: "Ok",
                  }).then(function(){   
                      window.location.href = "../carrinho.php"; 
                      });
      </script>
                  
                  <?php } else { ?>
      <script>
          swal({
              
              closeOnEsc: false,
              closeOnClickOutside: false,
              title: "Erro!",
              text: "Ops! Seu pedido não foi enviado!",
              icon: "error",
              button: "Ok",
                  }).then(function(){   
                      window.location.href = "../carrinho.php"; 
                      });
      </script>
      <?php } ?>
       
       
      Testando em localhost esse código funciona normalmente onde os valores das sessions estão sempre disponíveis,
      porem agora que coloquei o site no ar essas sessões não estão mais apresentando valores, e é somente nessa pagina que isso acontece
      nas outras paginas elas apresentam seus valores corretamente...
       
      Alguém tem alguma sugestão, do que poderia ser ?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.