Ir para conteúdo

POWERED BY:

Arquivado

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

_JD

[Resolvido] Sessões

Recommended Posts

Bom dia a todos.

Mais uma vez gostaria de contar com a conhecimento dos usuários do fórum.

Desta vez, preciso entender como funcionam as sessões e como posso ler os dados registrados nas mesmas.

Minha intenção é disponibilizar recursos conforme o nível de acesso de usuários.

 

Criei uma sessão e guardei dados na mesma, tal qual abaixo:

 

nome: c970b2e942c7e718b9b0e2e0191d3362

dados: nome|s:6:"jordan";status|s:1:"A";ses|s:32:"c970b2e942c7e718b9b0e2e0191d3362";

 

Também consegui criar cookies:

 

nome: TesteCookie

valor: Admin

 

para ler o cookie utilizei o $_COOKIE["TestCookie"] no caso do cookie descrito acima.

 

Gostaria de saber como faço para ler os dados da sessão, ou eles existem apenas para gravação?

Como faço para validar a sessão enviada pelo cliente, saber se a string passada na URL no caso é válida, ou seja, tem um arquivo equivalente no servidor?

 

Desde já, obrigado.

 

JD.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para usar sessão começa-se sempre pelo comando apenas uma vez por página:

session_start()

 

Para colocar uma variável em Sessão, faz assim:

<?php

session_start();
$var = "Teste de Sessão";
$_SESSION['var'] = $var;

?>

Pronto, você guardou em sessão.

Agora vamos supor que você precise usar essa variável em outra página.

Simplesmente você chama ela igualmente como você chama o Cookie.

<?php

session_start();
echo $_SESSION['var'];

?>

Para verificar se a Variável de Sessão existe pode-se fazer assim:

<?php

session_start();
if(isset($_SESSION['var']) && $_SESSION['var'] != "")
{
   echo "Variável de Sessão Inicializada:". $_SESSION['var'];
}
else
{
   echo "Esta Variável de Sessão Está Vazia";
}

?>

Sessões são geralmente usadas em LOGIN. Quando o usuário faz Login, é guardado o seu login em Sessão.

Para mostrar o nome dele na outra página como é comum em Fóruns.

E também para verificar se ele está logado ou não e dar permissões para o usuário somente quando ele estiver logado. E isso é possível com Sessão. Faz verificação, se foi criada a Sessão com o Login dele, deixa ele entrar na página, senão ele é redirecionado para a página de Login.

 

E para destruir a Sessão (Logoff de Sistema por Exemplo) usa-se:

<?php

   session_start();
   unset($_SESSION['var']); // Destroi a que você escolher
   session_destroy(); // Ou destroi todas

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

As sessões são forma simples de armazenar dados temporários. Os dados são apagados assim que o usuário fechar o browser. Mas, é importante que você saiba, que você pode excluir sessões quando quiser.

 

Imagine o seguinte problema: você tem um site, e quer que em algumas seções, apenas usuários que saibam uma determinada senha consigam acessar. Você pode utilizar sessões neste caso. Vamos ver como?

 

O ponto de partida para o uso de sessões, é com sua inicialização, fazendo uso da função session_start(). Vale lembrar, que até usá-la, não se pode imprimir nada na tela (seja via echo, print, avisos ou erros de algum trecho de código).

 

Por estes motivos, recomenda-se que você insira a função logo na primeira linha do seu script. Sempre que for utilizar sessões, você vai precisar inicializar esta função.

 

Exemplo:

 

<?php
session_start();
?>

Dentro da seção, fazemos uso da variável global $_SESSION para definir variáveis e valores.

 

Agora voltemos ao problema inicial. Precisamos restringir acesso a algumas seções. Vamos fazer isso, utilizando uma variável de sessão para saber se o usuário passou pela tela de login e informou a senha corretamente.

 

Nas seções onde a área será restrita, fazemos a verificação se o usuário logou. Veja o exemplo da pagina_secreta.php:

 

<?php
session_start();
if (!$_SESSION['logado'])
{
   header("Location: login.htm");
   die;
}
 
...

?>

Entendendo o código: primeiro inicializamos a sessão com a função session_start(). Em seguida fazemos a verificação: se não existir (uso da !) a variável de sessão "logado" ou se ela for igual a falso (booleano), redirecionamos para a página de login (função header) e finalizamos o script (função die). Caso contrário, o script prossegue, e a sessão é mostrada normalmente.

 

Vamos entender agora a página de login. Primeiro vamos criar o formulário do login.htm:

 

<form action="login.php" method="post">
 
<fieldset>
<legend>Informe a senha</legend>
   <label>Senha:</label> 
   <input type="password" name="senha" size="10" />
</fieldset>
 
</form>

Agora vejamos o arquivo login.php:

 

<?php
session_start();
 
if ($_POST['senha'] == 'secreta')
{
   $_SESSION['logado'] = true;
   header("Location: pagina_secreta.php");
   die;
}
else
{
   echo 'Senha incorreta';
}
 
?>

Entendendo o código: primeiro é feita a inicialização da sessão (função session_start). Em seguida é feita a comparação, se a senha digitada é igual a "secreta" (pode ser alterada), em caso verdadeiro é definida a variável de sessão "logado" como verdadeiro e redireciona o usuário para a página secreta. Caso contrário, imprime na tela "senha incorreta".

 

Agora vejamos sobre cookies:

 

Cookies são mecanismos para armazenar e consultar informações nos browsers dos visitantes da página. O PHP atribui cookies utilizando a função setcookie, que deve ser utilizada antes de qualquer impressão na página (mesmo esquema das sessões).

 

O uso de cookies não é recomendado quando se trata de informações sigilosas. Os dados dos cookies são armazenados no diretório de arquivos temporários do visitante, sendo facilmente visualizado por pessoas mal intencionadas.

 

A diferença entre sessões e cookies, é que os cookies podem ser acessados mesmo depois de o usuário ter fechado seu browser.

 

Outra questão importante, é que a opção “aceitar cookies” (do navegador – browser) que pode ser desativada a qualquer momento pelo visitante. Para uma transmissão de dados segura é recomendável o uso de sessões.

 

Sintaxe básica:

 

setcookie("nome_do_cookie","seu_valor","tempo_de_vida","path","domínio","conexão_segura")

Nome_do_cookie = É o nome que, posteriormente, se tornará a variável e o que o servirá de referência para indicar o cookie.

Seu_valor = É o valor que a variável possuirá. Esse valor pode ser de todos os tipos.

Tempo_de_vida = É o tempo, em segundos, que o cookie existirá no computador do visitante. Uma vez excedido esse prazo o cookie se apaga de modo irrecuperável. Se esse argumento ficar vazio, o cookie se apagará quando o visitante fechar o browser.

Path = endereço da página que gerou o cookie – automático

Domínio = domínio ao qual pertence o cookie – automático

Conexão_segura = Indica se o cookie deverá ser transmitido somente em uma conexão segura HTTPS.

 

Depois de definida um cookie, você pode acessá-lo através da variável global $_COOKIE['nome_do_cookie'].

Compartilhar este post


Link para o post
Compartilhar em outros sites

é importante lembrar as técnicas de segurança para sessões, fazer sempre uma nova key entre um intervalo de tempo, etc.. dá uma pesquisada no google que você tem melhores explicações.

 

@alaerte

em relação ao "aceitar cookies" do browser, se não aceitar cookies, a session também não funciona, correto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@alaerte

em relação ao "aceitar cookies" do browser, se não aceitar cookies, a session também não funciona, correto?

Funciona... ambas são funções totalmente distintas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ue, eu não estou entendendo nada, vocês estão falando da situação do usuário, ou estão falando se o navegador não aceita cookie, não funciona session ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ue, eu não estou entendendo nada, vocês estão falando da situação do usuário, ou estão falando se o navegador não aceita cookie, não funciona session ?

 

O Anderson Ferminiano havia perguntado se, caso os cookies estivessem desabilitados [no navegador], as sessões parariam de funcionar..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, sem cookies ativados a sessão também não vai funcionar...

 

Não necessariamente, você consegue propagar a sessão passando o id dela, dessa forma, mesmo com cookies desabilitados você consegue persistir a sessão:

 

The session module supports both methods. Cookies are optimal, but because they are not always available, we also provide an alternative way. The second method embeds the session id directly into URLs.

 

http://br.php.net/manual/en/session.idpassing.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera bom dia e bom 2010 à todos.

Obrigado pelas explicações.

Uma coisa que foi levantada não ficou clara. Posso propagar id de sessões via URL, como faço isso? Nos direcionamentos da página eu passo o resultado do session_id(). Como obtenho os dados gravados da sessão cujo o nome é o resultado de session_id()?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma coisa que foi levantada não ficou clara. Posso propagar id de sessões via URL, como faço isso?

 

Utilize a função session_id para isso, veja:

 

$sid =& $_GET[ 'PHPSESSID' ];
session_id( $sid );
session_start();

if ( !isset( $_SESSION[ 'teste' ] ) ) $_SESSION[ 'teste' ] = uniqid();

var_dump( session_id() , $_SESSION[ 'teste' ] );

 

Agora faça os testes:

 

http://localhost/tes...HPSESSID=abc123

http://localhost/tes...HPSESSID=abc124

http://localhost/tes...HPSESSID=abc125

 

Anote as saídas e depois refaça os testes:

 

http://localhost/tes...HPSESSID=abc123

http://localhost/tes...HPSESSID=abc124

http://localhost/tes...HPSESSID=abc125

 

As saídas para mim foram:

string 'abc123' (length=6)

string '4b3f2f0577fd8' (length=13)

 

string 'abc124' (length=6)

string '4b3f2f0904dab' (length=13)

 

string 'abc125' (length=6)

string '4b3f2fab11083' (length=13)

 

Apenas, tome o seguinte cuidado:

session_id() needs to be called before session_start() for that purpose.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde.

Agora minhas páginas tem autenticação de usuário inclusive filtro de acessos.

Muito obrigado a todos.

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.