Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Berlan Barbalho

Encerrar sessão de login

Recommended Posts

Bom dia, pessoal, mais uma vez venho pedir ajuda de vocês, estou com um problema para implantar o sistema de encerramento de sessão por inatividade, irei deixar meus arquivos aqui e o sistema que pretendo implantar:

 

Link do sistema modelo: http://forum.imasters.com.br/topic/501552-expirar-sessao-caso-usurio-fique-determinado-tempo-cio/

 

 

Abaixo minha função de captura de dados:

		public function loadDivLoginLogout()
		{
			global $ldTpl;
			if(isset($_SESSION['LOGIN']) == true)
			{
				$divLTemp = fopen("templates/". TEMPLATE_DIR ."/div[logout].tpl.php","r");
				$ldTpl->set("DIV[LOGIN_LOGOUT]", fread($divLTemp,filesize("templates/". TEMPLATE_DIR ."/div[logout].tpl.php")));
				$SQL_Q = $this->query("SELECT memb_name, memb___id, mail_addr FROM ".DATABASE_ACCOUNTS.".dbo.MEMB_INFO WHERE memb___id='". $_SESSION['LOGIN'] ."'");
				$SQL = mssql_fetch_object($SQL_Q);
				$ldTpl->set("MEMB_NAME", $SQL->memb_name);
				$ldTpl->set("MEMB_ID", $SQL->memb___id);
				$ldTpl->set("MEMB_MAIL", $SQL->mail_addr);
				$SQL_Q = $this->query("SELECT previlegy FROM dbo.webPrevilegy WHERE username='". $_SESSION['LOGIN'] ."'");
				$SQL = mssql_fetch_object($SQL_Q);
				switch((int)$SQL->previlegy)
				{
					case 1: $tmpMenu = "<li><a href=\"javascript: void({#SERVER_NAME});\" onClick=\"hide('parent','?page=paneluser');return document.EG_returnValue\"><span>".PANEL_USER."</span></a></li><li><a href=\"javascript: void({#SERVER_NAME});\" onClick=\"hide('parent','?page=panelgamemaster');return document.EG_returnValue\"><span>".PANEL_GAME_MASTER."</span></a></li>"; break;
					case 2: $tmpMenu = "<li><a href=\"javascript: void({#SERVER_NAME});\" onClick=\"hide('parent','?page=paneluser');return document.EG_returnValue\"><span>".PANEL_USER."</span></a></li><li><a href=\"javascript: void({#SERVER_NAME});\" onClick=\"hide('parent','?page=panelgamemaster');return document.EG_returnValue\"><span>".PANEL_GAME_MASTER."</span></a></li><li><a href=\"javascript: void({#SERVER_NAME});\" onClick=\"hide('parent','?page=paneladmin');return document.EG_returnValue\"><span>".PANEL_ADMIN."</span></a></li>"; break;
					default: $tmpMenu = "<li><a href=\"javascript: void({#SERVER_NAME});\" onClick=\"hide('parent','?page=paneluser');return document.EG_returnValue\"><span>".PANEL_USER."</span></a></li>"; break;
				}
				$ldTpl->set("MENU_LOGIN", $tmpMenu);
			}
			else 
			{
				$divLTemp = fopen("templates/". TEMPLATE_DIR ."/div[login].tpl.php","r");
				$ldTpl->set("DIV[LOGIN_LOGOUT]", fread($divLTemp,filesize("templates/". TEMPLATE_DIR ."/div[login].tpl.php")));
			}
		}

Abaixo minha função que faz o checks nas paginas protegidas:

		private function loginCheck()
		{
			if(empty($_GET['userName']) || empty($_GET['userPwd'])) exit("<strong>".LOGIN_FILL_ALL_FIELDS."</strong>");
            
            $lock = $this->query("SELECT [errors], DATEDIFF(MINUTE, [date], GETDATE()) [minutes] FROM [dbo].[webPasswordBruteForceLock] WHERE [username] = '". utf8_encode($_GET['userName']) ."'");
            if(mssql_num_rows($lock) > 0)
            {
                $lock = mssql_fetch_object($lock);
                if($lock->errors >= 5 && $lock->minutes < 5)
                {             
                    exit("<strong>".LOGIN_ERROR_LOCK."</strong>");
                }
                else if($lock->errors >= 5 && $lock->minutes >= 5)
                {   
                    $this->query("DELETE FROM [dbo].[webPasswordBruteForceLock] WHERE [username] = '". utf8_encode($_GET['userName']) ."'");
                }
            }
            
			$checkQ = $this->query('exec dbo.webVerifyLogin "'. utf8_encode($_GET['userName']) .'","'. utf8_encode($_GET['userPwd']) .'","'. USE_MD5 .'"');
			$check = mssql_fetch_row($checkQ);
			if($check[0] == 0) 
            {
                $lock = $this->query("SELECT 1 FROM [dbo].[webPasswordBruteForceLock] WHERE [username] = '". utf8_encode($_GET['userName']) ."'");
                if(mssql_num_rows($lock) > 0)
                {
                    $this->query("UPDATE [dbo].[webPasswordBruteForceLock] SET [errors] = [errors] + 1, [date] = GETDATE() WHERE [username] = '". utf8_encode($_GET['userName']) ."'");
                }
                else
                {
                    $insert = $this->query("INSERT INTO [dbo].[webPasswordBruteForceLock] ([username],[errors],[date]) VALUES ('". utf8_encode($_GET['userName']) ."', 1, GETDATE())");
                }
                exit("<strong>".LOGIN_ERROR."</strong>");
            }
			else 
			{
                $this->query("DELETE FROM [dbo].[webPasswordBruteForceLock] WHERE [username] = '". utf8_encode($_GET['userName']) ."'");
				$_SESSION['LOGIN'] = utf8_encode($_GET['userName']);
				exit("<strong>".LOGIN_SUCCESS."</strong><script type=\"text/javascript\"> window.location='?'; </script>");
			}
		}

Abaixo meu formulário de login:

<h1>Painel de Usuário</h1>
<div class='quadros'>
<label><input class="login" id='userName' type='text' name="uss_id" maxlength="12" value="Login" onFocus="if(this.value=='Login')this.value=''" onBlur="if(this.value=='')this.value='Login'" /><img src="templates/mudine/images/sub-linha.png" /></label>

<label><input class="login" id='userPwd' type='password' maxlength="12" value="Password" onFocus="if(this.value=='Password')this.value=''" onBlur="if(this.value=='')this.value='Password'" /><img src="templates/mudine/images/sub-linha.png" /></label>
<input style="background: #121212; boder-size: 1px; border-color: #22272a;" value='  Logar  ' type='submit' class='button'  onclick="javascript: Verify ('?page=ajax&require=login&userName='+ document.getElementById('userName').value+'&userPwd='+ document.getElementById('userPwd').value, 'ResultAjaxLogin', 'get'); " /> <a href="?page=recovery&type=password">Recuperar senha</a>
<br /><div id="ResultAjaxLogin"></div>
</div>

Abaixo onde localiza o logout:

<h1>Bem-Vindo {#MEMB_NAME}</h1>
<div id='cssmenu'>
    <ul>
       {#MENU_LOGIN}		
       <li><a href="javascript: void({#SERVER_NAME});" onClick="hide('parent','?page=logout');return document.EG_returnValue"><span>Deslogar</span></a></li>
    </ul>	
</div>

Bom pessoal, ja tentei implantar o sistema e não consegui, se alguém poder me ajudar agradeço muito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para usar a logica abaixo:

 

Ps.: Fiz outras correções

<?php
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

//$_SESSION["sessiontime"] = time() + 60;

if ( isset( $_SESSION["sessiontime"] ) ) {
	
	if ($_SESSION["sessiontime"] < time() ) { 
		session_destroy();
		echo "Seu tempo Expirou!";
		//Redireciona para login
	} else {
		echo 'Logado ainda!';
		//Seta mais tempo 60 segundos
		$_SESSION["sessiontime"] = time() + 60;
	}
	
} else { 
	session_destroy();
	//Redireciona para login
}

Você tem que setar o tempo da session, no momento do login

 

Exemplo:

private function loginApp()
{
    if (session_status() == PHP_SESSION_NONE) {     
       session_start();
    }

    $_SESSION["sessiontime"] = time() + 60; //Login
}

o restante você tem que chamar antes de tudo.

Ex.: Inicialização do sistema

private function initApp()
{
	if (session_status() == PHP_SESSION_NONE) {
            session_start();
        }

	if ( isset( $_SESSION["sessiontime"] ) ) {
	
		if ($_SESSION["sessiontime"] < time() ) { 
			session_destroy();
			echo "Seu tempo Expirou!";
			//Redireciona para login
		} else {
			echo 'Logado ainda!';
			//Seta mais tempo 60 segundos
			$_SESSION["sessiontime"] = time() + 60;
		}
		
	} else { 
		session_destroy();
		//Redireciona para login
	}
	
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.