Ir para conteúdo

POWERED BY:

Arquivado

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

Periscuelo

[RESOLVIDO] session

Recommended Posts

Boa Tarde pessoal, estou com a seguinte duvida:

 

Eu nunca trabalhei com session, e por onde pesquisei

vi que o melhor era usar $_SESSION para mecher com logins

e etc.

 

Bem, fiz uma pagina de forma que todos abram em index.php porém

sem frames, ou seja, coloquei uma tabela e dentro desta tabela eu

faço o include de uma variável (include "$teste.php") por exemplo.

Sendo assim coloco para que os links apontem qual pagina deve ser

aberta.

ex:

<a href='index.php?teste=pagina1'>Teste</a>
sendo assim quando abrir index.php vai abrir no include a pagina1.php

Se não ficou claro como funciona me avisem por favor eu tento explicar

de outra forma.

 

Desta forma eu gostaria que a sessão ficasse apenas na index.php uma vez

que é somente ela quem abre e o restante funciona a base do include.

Como deveria proceder?

Criei a sessão com ( session_start(); ) mas só consegui passar as variáveis

via (<input type='hidden' name='variavel' value'<?echo $valor;?>'>) e botões submit.

A minha idéia é que o session viesse para que eu não precisasse fazer isto.

E eu não sei se há como fazer isso.

Eu preciso que mesmo o cara dando N submits, uma vez que ele caia sempre na index

ele tenha a sessão dele aberta como usuário logado.

Tem como fazer isto?

 

Desculpem a minha ignorancia mas é que não faço a menor idéia de como funciona.

Como disse, fiz funcionar mas creio eu estar errado pois da muito trabalho mecher com sessão

pagina a pagina.

 

Ah mais uma duvida minha é como destruir a sessão de forma que o usuário seja obrigado a logar

novamente, pois se você voltar ele até fala que a pagina expirou, porém, se você der um F5 ele volta

a mostrar a pagina como se não tivesse deslogado.

 

Já tentei ( session_unset(); e unset($_SESSION['valor']); ) mas este problema continua e eu não quero

usar cookie pois há maquinas que não os aceitam.

 

Alguém poderia me dar uma luz?

Grato des de já pela atenção de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ocorre o seguinte, a $_Session é como uma variavel, em algum momento você precisa atribuir um valor para ela e a partir desse momento, enquanto existir a sessao, ela vai manter esse valoro que você vai ter que fazer é o seguinte(vou colocar a idéia e depois você passa pra php):quando o usuário acessar a página em questão, você verifica se a variável de sessao já tem algum valor, se NÃO tiver você joga o valor que você quiser para a variável de sessao, se tiver você já sai trabalhando com esse valor sem precisar atribuir novamente

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ocorre o seguinte, a $_Session é como uma variavel, em algum momento você precisa atribuir um valor para ela e a partir desse momento, enquanto existir a sessao, ela vai manter esse valoro que você vai ter que fazer é o seguinte(vou colocar a idéia e depois você passa pra php):quando o usuário acessar a página em questão, você verifica se a variável de sessao já tem algum valor, se NÃO tiver você joga o valor que você quiser para a variável de sessao, se tiver você já sai trabalhando com esse valor sem precisar atribuir novamente

Amigo Pita, primeiramente obrigado pela idéia e atenção.Ai é que está a minha duvida amigo.A pagina index.php é recarregada várias vezes, e a minha duvida é justamentese eu atribuindo o valor de $_Session uma unica vez ele vai manter o mesmo.Porque nos testes que eu fiz eu me vi obrigado a fazer input tipo hidden com o valorde $_Session se não ele não mantinha o usuário logado.É assim mesmo ou estou fazendo algo de errado?Mais uma vez muito obrigado pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, através de um manual na internet finalmente compreendi como usar a session.Restou-me apenas uma ultima duvida.Quando o usuário faz logout o session_destroy() entra em ação.Ótimo. Porém se o usuário clicar em voltar no ie por exemplo da que a página expirou.Até ai tudo bem. Quando você da F5 a tela aparece como se eu ainda estivesse com o antigo login.Como faço para evitar que isto aconteça sem o uso de cookies?Alguém poderia me dar um help?Agradeço des de já a atenção de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo Anderson abaixo vai o código.

<?php if (($_GET['var'] == 'logout') or ($_POST['var'] == 'logout')){		session_start();		unset($_SESSION['user_id']);		unset($_SESSION['user_nome']);		unset($_SESSION['user_email']);		session_destroy();	  } ?>

Já tentei de todas as formas abaixo:

<?php if (($_GET['var'] == 'logout') or ($_POST['var'] == 'logout')){		session_start();		session_destroy();	  } ?>
<?php if (($_GET['var'] == 'logout') or ($_POST['var'] == 'logout')){		session_unset();	  } ?>
<?php if (($_GET['var'] == 'logout') or ($_POST['var'] == 'logout')){		session_start();								session_unset();		session_destroy();	  } ?>
<?php if (($_GET['var'] == 'logout') or ($_POST['var'] == 'logout')){		session_start("teste");		session_destroy("teste");	  } ?>
<?php if (($_GET['var'] == 'logout') or ($_POST['var'] == 'logout')){		session_unset("teste");	  } ?>
<?php if (($_GET['var'] == 'logout') or ($_POST['var'] == 'logout')){		session_start("teste");								session_unset("teste");		session_destroy("teste");	  } ?>
Nenhuma destas formas deu resultado.

Há algo de errado?

Grato pela atenção de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

UPPreciso muito desta solução.Será que alguém pode me dar uma força?Grato novamente pela atenção de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente assim:

 

<?phpif ($_REQUEST['var'] == 'logout'){	session_start();	$_SESSION = array();	if (isset($_COOKIE[session_name()])) {		setcookie(session_name(), '', time()-42000, '/');	}	session_destroy();}?>

Note que troquei a condição, usando $_REQUEST. Assim, não importa se a requisição vier por GET ou POST ;)

 

[]s

Anderson Mello

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo Anderson abaixo vai o código.

<?php if (($_GET['var'] == 'logout') or ($_POST['var'] == 'logout')){		session_start();		unset($_SESSION['user_id']);		unset($_SESSION['user_nome']);		unset($_SESSION['user_email']);		session_destroy();	  } ?>
Estranho. Esta deveria ter funcionado. Nao esqueca q o browser deve estar habilitado para cookies e q se tu estas dando algum comando (hot key) para o browser ele pode estar apagando as variaveis d sessao.tenta o mesmo codigo sem o session_destroy(): o importante sao os unsets e averiguacao se os $_session['user_id'] esta setado com isset()MVC is complex: Web2.0 is simpler.Sybrain Frameworkhttp://www.sybrain.com

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente assim:

<?phpif ($_REQUEST['var'] == 'logout'){	session_start();	$_SESSION = array();	if (isset($_COOKIE[session_name()])) {		setcookie(session_name(), '', time()-42000, '/');	}	session_destroy();}?>
Note que troquei a condição, usando $_REQUEST. Assim, não importa se a requisição vier por GET ou POST ;)[]sAnderson Mello
Amigo Anderson mais uma vez obrigado pela atenção, Vi seu código mas tem um pequeno problema, eu não posso usar cookies afinal nem todo usuário de windows sabe o que é ou gosta de deixa-los habilitados.Estou tentando apenas com o $_SESSION sem cookies e gostaria de saber se sem cookie é possivel fazer com que a sessão expire e ele não consiga clicar em voltar, dar um F5 e visualizar como se ainda estivesse logado.P.S.Obrigado pela dica do $_REQUEST.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo Anderson abaixo vai o código.

<?php if (($_GET['var'] == 'logout') or ($_POST['var'] == 'logout')){		session_start();		unset($_SESSION['user_id']);		unset($_SESSION['user_nome']);		unset($_SESSION['user_email']);		session_destroy();	  } ?>
Estranho. Esta deveria ter funcionado. Nao esqueca q o browser deve estar habilitado para cookies e q se tu estas dando algum comando (hot key) para o browser ele pode estar apagando as variaveis d sessao.tenta o mesmo codigo sem o session_destroy(): o importante sao os unsets e averiguacao se os $_session['user_id'] esta setado com isset()MVC is complex: Web2.0 is simpler.Sybrain Frameworkhttp://www.sybrain.com
Pois é amigo David, já tentei de todas as formas e não foi. Agora fiquei curioso com a parte do

$_session['user_id'] esta setado com isset()

.Como seria este código do user id setado com isset()? É na hora de abrir a sessão do usuário logado? ou na hora do logout?Poderia me dar um exemplo?Mais uma vez grato pela atenção de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Periscuelo, no código que passei, é feita uma verificação se existe o cookie com o nome da sessão, eliminando-o caso exista.

Se a diretiva session.use_cookies estiver On (padrão do PHP), provavelmente esse cookie exisitirá. Porém, o seu problema penso que se resolve com o cabeçalho, sem manter nada em cache. Tente colocar o seguinte nas páginas:

 

header("Pragma: no-cache");header("Cache-Control: no-store");

Qualquer coisa, posta aí ;)

 

[]s

Anderson Mello

Compartilhar este post


Link para o post
Compartilhar em outros sites

Periscuelo, no código que passei, é feita uma verificação se existe o cookie com o nome da sessão, eliminando-o caso exista.Se a diretiva session.use_cookies estiver On (padrão do PHP), provavelmente esse cookie exisitirá. Porém, o seu problema penso que se resolve com o cabeçalho, sem manter nada em cache. Tente colocar o seguinte nas páginas:

header("Pragma: no-cache");header("Cache-Control: no-store");
Qualquer coisa, posta aí ;)[]sAnderson Mello
Amigo Anderson Obrigado pelas dicas. Ocorreu o seguinte: os códigos para não manter nada em cache não funcionaram para este problema. Com relação ao $_COOKIE é verdade fiz um teste e ele realmente cria esse cookie. Porém mesmo com o código que me indicou ainda consigo clicar em voltar, atualizar e assim ficar como se ainda estivesse logado.Só mais duas duvidas:Realmente então não há como fazer $_SESSION sem o bendito cookie?Se a resposta da primeira duvida for não, o que faz o comando
setcookie(session_name(), '', time()-42000, '/');
?Por que mesmo eu utilizando todos os códigos que você me passou ainda estou com este problema.Só lembrando que a pagina index.php é a principal e faz include em todas as outras páginas.Será que pelo fato da página que faz logout ser a mesma que cria a sessão quando o usuário loga, pode estar ocasionandoeste problema?Por algum motivo que não sei acho que não estou conseguindo apagar este maledeto cookie.Já tentei até unset($_COOKIE[session_name()]); mas não adianta.Teria que mudar mais alguma coisa? Será que fiz algo de errado?Mais uma vez grato pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, vamos lá :)

 

A linha com setcookie()... é justamente pra evitar que o cookie com o id da sessão seja mantido após o logout. Segundo a documentação do PHP, usando session_destroy() elimina as variáveis registradas na sessão e não o identificador dela (cookie). Como o procedimento de verificação de login normalmente é feito por uma variável setada (um índice do array $_SESSION), não temos problema com o id da sessão.

 

Abre um arquivo aí com phpinfo() pra ver qual o valor da diretiva session.cache_limiter.

No seu arquivo index, antes mesmo do session_start(), coloque a seguinte linha:

 

session_cache_limiter ('nocache');

E faz um teste, logando-se no sistema, abrindo algumas páginas, dando um logout em seguida e testando o "voltar" do browser.

Deve resolver ;)

 

[]s

Anderson Mello

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, vamos lá :)A linha com setcookie()... é justamente pra evitar que o cookie com o id da sessão seja mantido após o logout. Segundo a documentação do PHP, usando session_destroy() elimina as variáveis registradas na sessão e não o identificador dela (cookie). Como o procedimento de verificação de login normalmente é feito por uma variável setada (um índice do array $_SESSION), não temos problema com o id da sessão.Abre um arquivo aí com phpinfo() pra ver qual o valor da diretiva session.cache_limiter.No seu arquivo index, antes mesmo do session_start(), coloque a seguinte linha:

session_cache_limiter ('nocache');
E faz um teste, logando-se no sistema, abrindo algumas páginas, dando um logout em seguida e testando o "voltar" do browser.Deve resolver ;)[]sAnderson Mello
Amigo anderson, não funcionou seu comando porém resolvi meu problema.Já entendi o que está ocorrendo o erro era do meu script. Possuo apenas uma página que abre tudo chamada index.php certo? Ela estava criando uma sessão toda vez que abria, sendo assim a sessão nunca conseguiria ser encerrada.O que eu fiz? Coloquei um if depois do start session(); dizendo que só criaria as váriaveis da bem dita sessão se $teste = 1. E $teste só vai ser 1 se a pessoa efetuar login, ou seja ele será um uma unica vez isso se o usuário e senha estiverem corretos.Desculpe-me pela distração. De qualquer forma agradeço a você amigo Anderson e a todos que me ajudaram.Dou este tópico agora por encerrado e prometo que tentarei ajudar agora quem eu puder com o que eu aprendi sobre sessões.Abaixo vai o código que deixei para que tudo funcionasse perfeitamente.Usei todas as maneiras de se destruir uma sessão:
<?php	  //DESTRÓI AS VARIÁVEIS 	  if ($_REQUEST['pagina'] == 'logout'){		session_start();		unset($_SESSION['user_id']);		unset($_SESSION['user_nome']);		unset($_SESSION['user_email']);		$_SESSION = array();		session_destroy();	  }		  //Iniciar a Seção			session_start();			// Estes dados serao registrados na seção se o login der certo	  if ($login==1) {			$id   	= $_REQUEST['id'];			$nome 	= $_REQUEST['nome'];			$email 	= $_REQUEST['email'];			//grava dados na seção			$_SESSION['id']   		= $id; 			$_SESSION['nome'] 		= $nome; 			$_SESSION['email']		= $email;   	 }?>
Um abraço.

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.