Problema com Script de Sessao
Eu criei um sistema de Sessão para gerar estatisticas do site, criei com a ajuda de video aulas, mais eu agora me deparei com um problema inofensivo, mais que está mostrando erro na tela.
é o seguinte:
Eu possuo uma classe chama Session.class.php, e na linha 102, ou exatamente, onde estará marcado, este sistema de session, ele faz um cadastro e atualização no banco de dados, a cada momento que um usuário diferente entra no site, mais se analisarmos a lógica, ele não cadastra o registro na tabela ws_siteviews, a cada acesso, ele simplesmente cadastra 1 vez no dia, e a atualização desses dados é feita constantemente a cada acesso. só que eu ao acessar o site pela primeira vez, ou seja, eu não tenho nenhuma sessao no site ainda, e ao entrar no site ele me retorna o erro:
Erro na Linha: #102 :: Trying to get property of non-object
/home/garotosonline/public_html/site/admin/conexao/Helpers/Session.class.php
Sim este erro está ocorrendo, porque não existe, nenhum dado referente a data atual ao qual o sistema está tentando selecionar pelo método getTraffic(). Então, eu já tentei fazer algumas verificações e efetuar alguns debugs, mais eu não encontrei uma boa solução, sem mudar este código, eu gostaria de encontrar alguém que pudesse me ajudar, a encontrar um boa solução para este problema.
Resumindo, esta classe não está cadastrando o dado no banco de dados, e este dado está tendo falta, e por isso apresenta o erro que a propriedade nao é um objeto. Alguém tem alguma dica pra dar, alguma lógica, para fazer, sem mudar esse código?
class Session {
private $Date;
private $Cache;
private $Traffic;
private $Browser;
function __construct($Cache = null) {
//ob_start();
//session_start();
$this->CheckSession($Cache);
}
//Verifica e executa todos os m?todos da classe!
private function CheckSession($Cache = null) {
$this->Date = date('Y-m-d');
$this->Cache = ( (int) $Cache ? $Cache : 20 );
if (empty($_SESSION['useronline'])):
$this->setTraffic();
$this->setSession();
$this->CheckBrowser();
$this->setUsuario();
$this->BrowserUpdate();
else:
$this->TrafficUpdate();
$this->sessionUpdate();
$this->CheckBrowser();
$this->UsuarioUpdate();
endif;
//
$this->Date = null;
}
/*
* ***************************************
* ******** SESS?O DO USU?RIO ********
* ***************************************
*/
//Inicia a sess?o do usu?rio
private function setSession() {
$_SESSION['useronline'] = [
"online_session" => session_id(),
"online_startview" => date('Y-m-d H:i:s'),
"online_endview" => date('Y-m-d H:i: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)
];
}
//
//
// //Atualiza sess?o do usu?rio!
private function sessionUpdate() {
$_SESSION['useronline']['online_ip'] = filter_input(INPUT_SERVER, 'REMOTE_ADDR', FILTER_DEFAULT);
$_SESSION['useronline']['online_endview'] = date('Y-m-d H:i:s', strtotime("+{$this->Cache}minutes"));
$_SESSION['useronline']['online_url'] = filter_input(INPUT_SERVER, 'REQUEST_URI', FILTER_DEFAULT);
$_SESSION['useronline']['online_agent'] = filter_input(INPUT_SERVER, "HTTP_USER_AGENT", FILTER_DEFAULT);
}
//
// /*
// * ***************************************
// USU?RIOS, VISITAS, ATUALIZA??ES *
// * ***************************************
// */
//
// //Verifica e insere o tr?fego na tabela
private function setTraffic() {
$this->getTraffic();
if (!$this->Traffic || $this->Traffic==null):
$ArrSiteViews = [ 'siteviews_date' => $this->Date, 'siteviews_users' => 1, 'siteviews_views' => 1, 'siteviews_pages' => 1, 'online_ip' => $_SESSION['useronline']['online_ip']];
$createSiteViews = new Create;
$createSiteViews->ExeCreate("ws_siteviews", $ArrSiteViews);
else:
if (!$this->getCookie()):
$ArrSiteViews = [ 'siteviews_users' => $this->Traffic->siteviews_users + 1, 'siteviews_views' => $this->Traffic->siteviews_views + 1, 'siteviews_pages' => $this->Traffic->siteviews_pages + 1];
else:
$ArrSiteViews = [ 'siteviews_views' => $this->Traffic->siteviews_views + 1, 'siteviews_pages' => $this->Traffic->siteviews_pages + 1];
endif;
$updateSiteViews = new Update;
$updateSiteViews->ExeUpdate("ws_siteviews", $ArrSiteViews, "WHERE siteviews_date = :date", "date={$this->Date}");
endif;
}
//
// //Verifica e atualiza os pageviews
private function TrafficUpdate() {
$this->getTraffic();
//o erro está aparecendo aqui, porque não está encontrado o cadastro referente ao dia. Essa linha abaixo, e a consulta dela é feita atraves do metodo getTraffic
$ArrSiteViews = [ 'siteviews_pages' => $this->Traffic->siteviews_pages + 1];
$updatePageViews = new Update;
$updatePageViews->ExeUpdate("ws_siteviews", $ArrSiteViews, "WHERE siteviews_date = :date", "date={$this->Date}");
$this->Traffic = null;
}
//
// //Obt?m dados da tabele [ HELPER TRAFFIC ]
// //ws_siteviews
private function getTraffic() {
$readSiteViews = new Read;
$readSiteViews->ExeRead("ws_siteviews", "WHERE siteviews_date = :date OR online_ip = :ip", "date={$this->Date}&ip={$_SESSION['useronline']['online_ip']}");
if ($readSiteViews->getRowCount()):
$this->Traffic = $readSiteViews->getResult()[0];
else:
$this->Traffic = null;
endif;
}
//
// //Verifica, cria e atualiza o cookie do usu?rio [ HELPER TRAFFIC ]
private function getCookie() {
$Cookie = filter_input(INPUT_COOKIE, 'useronline', FILTER_DEFAULT);
setcookie("useronline", base64_encode("weblab"), time() + 86400);
if (!$Cookie):
return false;
else:
return true;
endif;
}
//
// /*
// * ***************************************
// * ***** NAVEGADORES DE ACESSO ****
// * ***************************************
// */
//
// //Identifica navegador do usu?rio!
private function CheckBrowser() {
$this->Browser = $_SESSION['useronline']['online_agent'];
if (strpos($this->Browser, 'Chrome')):
$this->Browser = 'Chrome';
elseif (strpos($this->Browser, 'Firefox')):
$this->Browser = 'Firefox';
elseif (strpos($this->Browser, 'MSIE') || strpos($this->Browser, 'Trident/')):
$this->Browser = 'IE';
else:
$this->Browser = 'Outros';
endif;
}
//
// //Atualiza tabela com dados de navegadores!
private function BrowserUpdate() {
$readAgent = new Read;
$readAgent->ExeRead("ws_siteviews_agent", "WHERE agent_name = :agent", "agent={$this->Browser}");
if (!$readAgent->getResult()):
$ArrAgent = ['agent_name' => $this->Browser, 'agent_views' => 1];
$createAgent = new Create;
$createAgent->ExeCreate("ws_siteviews_agent", $ArrAgent);
else:
$ArrAgent = ['agent_views' => $readAgent->getResult()[0]->agent_views + 1];
$updateAgent = new Update;
$updateAgent->ExeUpdate("ws_siteviews_agent", $ArrAgent, "WHERE agent_name = :name", "name={$this->Browser}");
endif;
}
//
// /*
// * ***************************************
// * ******* USU?RIOS ONLINE *******
// * ***************************************
// */
//
// //Cadastra usu?rio online na tabela!
private function setUsuario() {
$sesOnline = $_SESSION['useronline'];
$sesOnline['agent_name'] = $this->Browser;
$userCreate = new Create;
$userCreate->ExeCreate("ws_siteviews_online", $sesOnline);
}
//
// //Atualiza navega??o do usu?rio online!
private function UsuarioUpdate() {
$ArrOnlone = [
'online_ip' => $_SESSION['useronline']['online_ip'],
'online_endview' => $_SESSION['useronline']['online_endview'],
'online_url' => $_SESSION['useronline']['online_url'],
'online_agent' => $_SESSION['useronline']['online_agent']
];
$userUpdate = new Update;
$userUpdate->ExeUpdate("ws_siteviews_online", $ArrOnlone, "WHERE online_session = :ses", "ses={$_SESSION['useronline']['online_session']}");
if (!$userUpdate->getRowCount()):
$readSes = new Read;
$readSes->ExeRead("ws_siteviews_online", 'WHERE online_session = :onses', "onses={$_SESSION['useronline']['online_session']}");
if (!$readSes->getRowCount()):
$this->setUsuario();
endif;
endif;
}
}Discussão (2)
Carregando comentários...