Jump to content


Photo

Como Usar $_session Em Php?


  • Faça o login para participar
5 replies to this topic

#1 Uno

Uno

    Novato no fórum

  • Usuários
  • 5 posts
  • Sexo:Não informado

Posted 16/09/2006, 22:00

Ola,

Estou tendo problemas com o codigo PHP para criar uma pagina restrita.
Por isso fiz um exemplo simplificado para explicar melhor.
Suponha que o acesso será feito no www.meusite.com.br.

O exemplo inicia com uma pagina em HTML que coleta as informações de usuário e senha. O codigo é mostrado abaixo:

<html>
<body>
<form method="POST" action="autoriza.php"><!Pede usuário e senha e envia para o script autoriza.php>
<p>Usuário: <input type="text" name="usuario" size="4"></p><!Entra com o usuário>
<p>Senha: <input type="password" name="senha" size="4"></p><!Entra com a senha>
<p><input type="submit" value="Enviar" name="B1"></p><!Envia>
</form>
</body>
</html>

Na sequencia, a pagina autoriza.php irá verificar se usuário e senha são válidos. O usuário válido é uno e a senha 123. O codigo da página autoriza.php é mostrado abaixo:

<?php
if ($_POST["usuario"] == "uno" && $_POST["senha"] == "123") //Verifica se o usuário e senha são válidos
{ //se forem válidos...
session_start(); //inicia a sessão...
$_SESSION["autoriza"] = true; //define a variável "autoriza" como verdadeira...
header ("location: [url="http://www.meusite.com.br/restrita.php");"]http://www.meusite.com.br/restrita.php");[/url] //chama a página restrita.
}
else //se não forem válidos...
echo "ATENÇÃO: Você digitou usuário ou senha incorretos!!"; //emite mensagem de alerta.
?>

Se o usuário e a senha forem corretos, a variável $_SESSION["autoriza"] é definida como verdadeira para que seja possível acessar a página restrita.php.
Se o usuário e a senha não forem corretos uma mensagem de alerta é emitida.

O código da página restrita.php é mostrado abaixo:

<?php
session_start(); //inicia sessão...
if ($_SESSION["autoriza"] == true) //verifica se a variável "autoriza" é verdadeira...
echo "Você é um USUÁRIO AUTORIZADO!!"; //se for emite mensagem positiva.
else //se não for...
echo "ATENÇÃO: ESTE ACESSO NÃO É AUTORIZADO!!"; //emite mensagem de alerta.
?>

É neste ponto que o erro acontece. A sessão é iniciada, e a variável $_SESSION["autoriza"] é verificada. Se ela for verdadeira, significa que a página restrita foi acessada com usuário e senha corretos. Se a variável $_SESSION["autoriza"] não for verdadeira, significa que a pagina restrita foi acessada de forma direta ou não autorizada.

No entanto, neste ponto, mesmo com usuário e senha corretos, o servidor emite a seguinte mensagem de erro:

PHP Warning: session_start(): open(/tmp\sess_........, O_RDWR) failed: No such file or directory (2) in D:\webpoint\docs\.....\restrita.php on line 3 PHP Notice: Undefined index: autoriza in D:\webpoint\docs\.....\restrita.php on line 4 PHP Warning: Unknown(): open(/tmp\sess_......, O_RDWR) failed: No such file or directory (2) in Unknown on line 0 PHP Warning: Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in Unknown on line 0

Por favor analisem este exemplo e me orientem com uma "dica" ou informem se existe algum erro no raciocínio ou no código.

Grato pela atenção.

#2 Goku Jr

Goku Jr

    Nilson

  • Usuários
  • 3757 posts
  • Sexo:Masculino

Posted 16/09/2006, 22:09

você está INICIANDO a sessão, depois de apresentar para o NAVEGADOR targs de HTML!

coloque o SESSION_START() no inicio da página!

<?php
session_start();
?>
//CODIGO HTML... / PHP

T+
-----------------------------------------------------------------------
PALMEIRAS - Primeiro campeão do mundo em 1951

#3 Uno

Uno

    Novato no fórum

  • Usuários
  • 5 posts
  • Sexo:Não informado

Posted 16/09/2006, 22:52

Obrigado pela dica Goku Jr,

Só não deu certo. O servidor ainda retorna a mesma mensagem de erro.

Eu fiz como você disse:

Na página index.htm, antes da tag <html> iniciei a sessão:

<?php
session_start();
?>

<html>

<body>

<form method="POST" action="autoriza.php"><!Pede usuário e senha e envia para o script autoriza.php>
<p>Usuário: <input type="text" name="usuario" size="4"></p><!Entra com o usuário>
<p>Senha: <input type="password" name="senha" size="4"></p><!Entra com a senha>
<p><input type="submit" value="Enviar" name="B1"></p><!Envia>
</form>

</body>

</html>

Nos codigos php não mexi.

Será que fiz algo errado?

#4 Diogo Souza da Silva

Diogo Souza da Silva

    Novato no fórum

  • Usuários
  • 11 posts
  • Sexo:Não informado

Posted 16/09/2006, 23:24

O <? session_start() ; ?> deve estar no começo de todas as paginas que acessem as session.
Nos codigos que vc passou, parece que vc esqueceu uns { } nos if/else .

Vc pode registrar uma variavel em uma session assim:

$var = true ;
session_register("var");

e entao acessa-la assim:

$_SESSION["var"];


Fora isso, é bom começar o autoriza.php assim:

<?
session_start();
session_destroy();
session_start();
?>

para zerar o registro de sessions.


Boa sorte (y)

#5 Goku Jr

Goku Jr

    Nilson

  • Usuários
  • 3757 posts
  • Sexo:Masculino

Posted 17/09/2006, 11:09

está retornando a mesma mensagem de erro ?

se sim, você está rodando este seus script local, digo em sua maquina ?
-- se for, abra o PHP.INI e verifique se o session.save_path está configurado corretamente, de preferência, coloque o caminho c:/apache/temp para que possa salvar os temporarios da SESSÃO

T+
-----------------------------------------------------------------------
PALMEIRAS - Primeiro campeão do mundo em 1951

#6 Uno

Uno

    Novato no fórum

  • Usuários
  • 5 posts
  • Sexo:Não informado

Posted 25/09/2006, 00:03

está retornando a mesma mensagem de erro ?

se sim, você está rodando este seus script local, digo em sua maquina ?
-- se for, abra o PHP.INI e verifique se o session.save_path está configurado corretamente, de preferência, coloque o caminho c:/apache/temp para que possa salvar os temporarios da SESSÃO

T+


Ola,

Realmente o erro estava na configuração do servidor onde hospedo o meu site. Enviei um email para o suporte e eles detectaram uma falha na configuração. Eles fizeram uma alteração no php.ini e o erro parou de ocorrer.

Obrigado pelas dicas.




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq