Ir para conteúdo

POWERED BY:

Arquivado

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

tiagofelipebones

Problema com $_SESSION

Recommended Posts

Galera talvez seja facil mas não estou conseguindo vamos lá:

Tenho um sistema de login que mais de um usuario acessa porém quando um usuario já esta logado e outro entra altera a session daquele que já estava logado!

Alguma dica?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como você está usando as variáveis do session?

segue o código para logar:

 

 







 
<?php
/* Define o limite de tempo do cache em 30 minutos */
session_cache_expire(30);
/* Define o limitador de cache para 'private' */
session_cache_limiter('private');
if (!isset($_SESSION)) session_start();

require_once('../Connections/config.php');
require_once('acento.php');

function string_aleatoria($tamanho) {
$conteudo = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
$string = '';
for($i=0;$i<$tamanho;$i++) {
$string .= $conteudo{rand(0,64)};
}
return $string;
}

if((isset($_POST[login_post])) and (isset($_POST[senha_post]))){
//Consulta o login
$resultado=mysql_query("SELECT * FROM `usuario` WHERE (senha='".md5($_POST[senha_post])."') AND (usuario='".$_POST[login_post]."') OR (email='".remover($_POST[login_post])."')") or die ('Erro com a consulta ao Banco de Dados');
//Cria a array para armazenar em sessoes
$pegar = mysql_fetch_array($resultado);

//Verifica se retornou algo se não volta para login
if(mysql_num_rows($resultado)==1){

if(isset($_POST[lembre])){
$token = string_aleatoria(64);
setcookie($_SERVER['HTTP_HOST'], $token, (time() + (3600 * 24 * 30))); //Seta o cookie para um mes
}

//Armazena as sessoes
$_SESSION[idusuario]= $pegar[idusuario];
$_SESSION[usuario]= $pegar[usuario];
$_SESSION[idgrupo_usuario]= $pegar[idgrupo_usuario];
$_SESSION[login]= $pegar[login];
$_SESSION[email]= $pegar[email];



//Verifica se o id do usuário já se encontra nas sessoes
$verifica = mysql_query ("SELECT * FROM sessoes WHERE idusuario = '".$pegar[idusuario]."'")or die('Erro com as sessoes');
$array_verifica = mysql_fetch_array($verifica);

//Se for encontrado, faz a atualizaçao das sessoes
if (mysql_num_rows($verifica) > 0){
mysql_query("UPDATE sessoes SET ultima_visita='".$array_verifica[nova_visita]."', nova_visita ='".date('Y-m-d')."', hash = '".$token."', logado = 1 WHERE idusuario = '".$pegar[idusuario]."'") or die (mysql_error());

//Caso nao seja encontrado ele insere 
} else {
if(empty($token)){$token='logoff';}
mysql_query("INSERT INTO sessoes (idusuario, ultima_visita, nova_visita, hash, logado) VALUES ('".$pegar[idusuario]."','".date('Y-m-d')."','".date('Y-m-d')."', '".$token."', '1')") or die (mysql_error());
}



print "<script> window.location='index.php';</script>";

}else{

print "<script> window.location='login.php';</script>";

}
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá meu amigo

 

faz assim:

 

session_start();

 

$dados[] = 'algo';

$_SESSION['user'][] = $dados;

 

isso não altera em nada. cria uma matriz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera acho que encontrei uma solução para este problema!

Como vocês podem ver tenho um campo lembra para setar um cookie para o proximo login, então estou fazendo para os usuarios logar pelo ip e se o ip dele mudar ele precisará logar novamente assim evita tambem dois usuarios logarem com a mesma conta...

Alguma sugestão? alguem já fez isso?

Assim que concluir o script posto aki para quem precisar de uma solução semelhante.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salve Galera!

Como havia dito fiz o script para o usuario logar pelo ip segue o código:
Classe para conexão com o banco de dados:
config.php

 

<?php

class conexao {
public $host="localhost"; 
public $user="seu_user";
public $pass="sua_senha";
public $database="sua_base_de_dados";
public $connect="";
public $select="";

function __construct() {
$this->connect=mysql_connect($this->host,$this->user,$this->pass) or die (mysql_error());
$this->select=mysql_select_db($this->database,$this->connect) or die (mysql_error());

}
}
$conexao=new conexao();
?>

 

 

Aqui a classe para corrigir a acentuação:
acento.php



<?php
function acento($str, $enc = "UTF-8")
{
$acentos = array(
'À'=>'/À/',
'à'=>'/à/',
'Á'=>'/Á/',
'á'=>'/á/',
'Â'=>'/Â/',
'â'=>'/â/',
'Ã'=>'/Ã/',
'ã'=>'/ã/',
'Ä'=>'/Ä/',
'ä'=>'/ä/',
'È'=>'/È/',
'è'=>'/è/',
'É'=>'/É/',
'é'=>'/é/',
'Ê'=>'/Ê/',
'ê'=>'/ê/',
'Ë'=>'/Ë/',
'ë'=>'/ë/',
'Ì'=>'/Ì/',
'ì'=>'/ì/',
'Í'=>'/Í/',
'í'=>'/í/',
'Î'=>'/Î/',
'î'=>'/î/',
'Ï'=>'/Ï/',
'ï'=>'/ï/',
'Ò'=>'/Ò/',
'ò'=>'/ò/',
'Ó'=>'/Ó/',
'ó'=>'/ó/',
'Ô'=>'/Ô/',
'ô'=>'/ô/',
'Õ'=>'/Õ/',
'õ'=>'/õ/',
'Ö'=>'/Ö/',
'ö'=>'/ö/',
'Ù'=>'/Ù/',
'ù'=>'/ù/',
'Ú'=>'/Ú/',
'ú'=>'/ú/',
'Û'=>'/Û/',
'û'=>'/û/',
'Ü'=>'/Ü/',
'ü'=>'/ü/',
'Ý'=>'/Ý/',
'ý'=>'/ý/',
'Ç'=>'/Ç/',
'ç'=>'/ç/',
'Ñ'=>'/Ñ/',
'ñ'=>'/ñ/',
'ª'=>'/ª/',
'º'=>'/°/',
);
return preg_replace($acentos, array_keys($acentos), htmlentities($str,ENT_NOQUOTES, $enc));
}

function acento_js($str)
{
$acentos = array(
'á' => '\u00e1',
'à' => '\u00e0',
'â' => '\u00e2',
'ã' => '\u00e3',
'ä' => '\u00e4',
'Á' => '\u00c1',
'À' => '\u00c0',
'Â' => '\u00c2',
'Ã' => '\u00c3',
'Ä' => '\u00c4',
'é' => '\u00e9',
'è' => '\u00e8',
'ê' => '\u00ea',
'ê' => '\u00ea',
'É' => '\u00c9',
'È' => '\u00c8',
'Ê' => '\u00ca',
'Ë' => '\u00cb',
'í' => '\u00ed',
'ì' => '\u00ec',
'î' => '\u00ee',
'ï' => '\u00ef',
'Í' => '\u00cd',
'Ì' => '\u00cc',
'Î' => '\u00ce',
'Ï' => '\u00cf',
'ó' => '\u00f3',
'ò' => '\u00f2',
'ô' => '\u00f4',
'õ' => '\u00f5',
'ö' => '\u00f6',
'Ó' => '\u00d3',
'Ò' => '\u00d2',
'Ô' => '\u00d4',
'Õ' => '\u00d5',
'Ö' => '\u00d6',
'ú' => '\u00fa',
'ù' => '\u00f9',
'û' => '\u00fb',
'ü' => '\u00fc',
'Ú' => '\u00da',
'Ù' => '\u00d9',
'Û' => '\u00db',
'ç' => '\u00e7',
'Ç' => '\u00c7',
'ñ' => '\u00f1',
'Ñ' => '\u00d1',
'á' => '\u00e1',
'à' => '\u00e0',
'â' => '\u00e2',
'ã' => '\u00e3',
'ä' => '\u00e4',
'Á' => '\u00c1',
'À' => '\u00c0',
'Â' => '\u00c2',
'Ã' => '\u00c3',
'Ä' => '\u00c4',
'é' => '\u00e9',
'è' => '\u00e8',
'ê' => '\u00ea',
'É' => '\u00c9',
'È' => '\u00c8',
'Ê' => '\u00ca',
'Ë' => '\u00cb',
'í' => '\u00ed',
'ì' => '\u00ec',
'Î' => '\u00ee',
'ï' => '\u00ef',
'Í' => '\u00cd',
'Ì' => '\u00cc',
'Î' => '\u00ce',
'Ï' => '\u00cf',
'ó' => '\u00f3',
'ò' => '\u00f2',
'ô' => '\u00f4',
'õ' => '\u00f5',
'ö' => '\u00f6',
'Ó' => '\u00d3',
'Ò' => '\u00d2',
'Ô' => '\u00d4',
'Õ' => '\u00d5',
'Ö' => '\u00d6',
'ú' => '\u00fa',
'ù' => '\u00f9',
'û' => '\u00fb',
'ü' => '\u00fc',
'Ú' => '\u00da',
'Ù' => '\u00d9',
'Û' => '\u00db',
'ç' => '\u00e7',
'Ç' => '\u00c7',
'ñ' => '\u00f1',
'Ñ' => '\u00d1',
);

return strtr( $str, $acentos);
}

function remover($str, $enc = "UTF-8")
{

$remove = array(
'A' => '/À|Á|Â|Ã|Ä|Å/',
'a' => '/à|á|â|ã|ä|å/',
'C' => '/Ç/',
'c' => '/ç/',
'E' => '/È|É|Ê|Ë/',
'e' => '/è|é|ê|ë/',
'I' => '/Ì|Í|Î|Ï/',
'i' => '/ì|í|î|ï/',
'N' => '/Ñ/',
'n' => '/ñ/',
'O' => '/Ò|Ó|Ô|Õ|Ö/',
'o' => '/ò|ó|ô|õ|ö/',
'U' => '/Ù|Ú|Û|Ü/',
'u' => '/ù|ú|û|ü/',
'Y' => '/Ý/',
'y' => '/ý|ÿ/',
'a.' => '/ª/',
'o.' => '/º/');

return strtolower(preg_replace($remove, array_keys($remove), htmlentities($str,ENT_NOQUOTES, $enc)));
}

?>

 

 

Aqui recebe os dados do formulário:
logar.php

 



<?php
require_once('config.php');
require_once('acento.php');
//Verifica se os campos login e senha do form teem dados
if((isset($_POST['login_post'])) && (isset($_POST['senha_post']))){
//Consulta a requisição
$resultado=mysql_query("SELECT * FROM `usuario` WHERE (senha='".mysql_real_escape_string( md5($_POST['senha_post']))."') AND (usuario='".mysql_real_escape_string($_POST['login_post'])."') OR (email='".mysql_real_escape_string(remover($_POST['login_post']))."')") or die (mysql_error());

//Verifica se retornou algo se não volta para login
if(mysql_num_rows($resultado)==1){
//Cria a array da consulta
$pegar = mysql_fetch_array($resultado);
//Aqui com o usuario encontrado altera o ip e o campo de logado e do login atual
$logou = mysql_query("UPDATE usuario SET ultimo_login = '".mysql_real_escape_string(addslashes(date('Y-m-d')))."', ip = '".mysql_real_escape_string(addslashes($_SERVER['REMOTE_ADDR']))."', logado = '".mysql_real_escape_string(addslashes('1'))."' WHERE idusuario = '".mysql_real_escape_string(addslashes($pegar['idusuario']))."'") or die(mysql_error());
//agora se alterou vai mandar o usuario para a pagina inicial se não voltapara login
if($logou){
print "<script> window.location='index.php';</script>";
}else{
print "<script> window.location='login.php';</script>";
}

}else{
// Se não encontrou o usuario e senha volta para login
print "<script> window.location='login.php';</script>";

}
}else{
//Se um dos campos do post estão vazios volta para login
print "<script> window.location='login.php';</script>";
}

?>

 

Agora Faremos a proteção :

protege.php

 



<?php
//Se não requeriu a conexão ainda require ela agora atraves do '_once'
require_once('config.php');

$sql_logar=mysql_query("SELECT * FROM `usuario` WHERE ip = '".mysql_real_escape_string(addslashes($_SERVER['REMOTE_ADDR']))."'") or die (mysql_error());
//Verifica se a consulta retornou resultado e o nivel de usuário
if(mysql_num_rows($sql_logar) == 1){

//Cria a array da consulta
$logar = mysql_fetch_array($sql_logar);

//verifica se o usuario detem o nivel de acesso necessário para acessar a pagina
$array_nivel=explode(",",$nivel);

while(list(,$value)=each($array_nivel)) {
//Se o nivel especificado na página for diferente do nivel do usuario manda pra login
if($value != $logar['idgrupo_usuario']){
print "<script> window.location='login.php';</script>";
}

}
//Se não encontrou o ip do usuario manda para login
}else{
print "<script> window.location='login.php';</script>";

}
?>

 

 


Agora como devemos utilizar tudo isso:

Na pagina que você precisa proteger inclua no inicio:

pagina_protegida.php

 

<?php
$nivel=1;
include_once('protege.php');

?>

 

 

Note que a avriavel $nivel deve ser setada antes de incluir o arquivo de proteção.

Beleza pura se hoveer sugestões para melhoria do código, ficarei muito grato!

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.