[PHP] sessions

SlashString

Power Member
Boas mais uma vez! Vou tentar ser o mais explícito e breve possível..
Tenho um portal quase acabado, em que certos conteúdos são apenas para utilizadores registados.

Imaginem a página de um portal, por exemplo, um qualquer index.php.. no topo tem um header que contem um formulário de login, com os campos username, password, OK button.
Isto aparece em todas as páginas antes de o utilizador se registar. Depois de ele estar registado, eu redirecciono para uma qualquer página, e ele fica "logado" atraves de uma sessão. Tudo bem até aqui.. o problema é que se ele clicar num link qualquer para o index.php, apesar de ele estar ainda dentro da sessão (porque no index eu faço include do php da sessão), mas aparece na mesma o header com os campos para fazer login, o que não faz sentido nenhum.

Eu já estive a tentar procurar solução, mas não encontrei.. Suponho que necessito fazer algo do género de "uma função" nesse header, em que faça algo como:
Código:
IF ( utilizador não se registou )
   mostrar campos de login;
ELSE 
   apresentar mensagem da sessão [COLOR=silver]//Bem vindo User![/COLOR]


Desde já obrigado,
Cumps
 
:wscared: desculpa.. o código de... ?

Tenho algo como:

index.php -- no topo da página, faço include de login.php
login.php -- contem apenas pequeno formulário de login , username, pass....
secret.php -- faço include de sessão... etc..

se o utilizador estiver em secret.php, e clicar num link para o index.php, volta a aparecer no topo da pagina o formulário de login..


:sad:
 
Não foi muito explícito :x
Podes mostrar o código?
Se o login.php mostrar o formulário, só fazes include dele se não houver nenhum user ligado.
Fazes o session_start() antes de usares o $_SESSION pela primeira vez?
 
Bom, eu colocava todo o código aqui, mas é imenso..
Vou tentar definir o que talvez seja mais necessário:

Tenho as páginas:
index.php | auth.php

No index.php, no topo da página, pretendo que apareça:
SE (utilizador não tiver feito login) apresenta o formulário para login, campos user, pass, ok;
SE (utilizador tiver feito login) apresenta "Olá user"

tal como na imagem:
Untitled-1copy.jpg




auth.php:
PHP:
<? 
// liga base dados
include connectDB.php; 
 
// inicia sessão
session_start();  
 
 
if($_POST){ 
  $_SESSION['userid']=$_POST["userid"]; 
  $_SESSION['password']=$_POST["password"];   
} 
 
 
$result=mysql_query("select * from plus_signup where userid='" . $_SESSION['userid'] . "' and password='" . $_SESSION['password'] . "'"); 
 
$num=mysql_num_rows($result);  
 
if($num < 1){ 
  echo "   
  <form action=\"index.php\" method=\"post\">
        <label>
          <span class=\"style10\"><span class=\"style9\">Login</span></span>
          <input name=\"userid\" type=\"text\" class=\"style2\" >
          &nbsp;&nbsp;<span class=\"style10\">Password</span> 
          <input name=\"password\" type=\"password\" class=\"style2\" >
          </label>
        <span class=\"style10\">&nbsp;
        <input name=\"Submit\" type=\"submit\" class=\"style2\" value=\"Ok\">
        &nbsp;&nbsp;|&nbsp;Ainda n&atilde;o &eacute; Cliente? <a href=\"signup.php\">Registar</a> |</span>
      </form>"; 
 }
 else { 
 echo "Bem vindo <b>$_SESSION[userid]</b>. <a href=logout.php>Faça logout aqui!</a>";  
   }
  exit;  
?>


Obrigado mais uma vez desde já pela ajuda!

Cumps
 
Última edição:
Primeiro que tudo, o session_start() deve ser sempre a primeira instrução a ser chamada.

Segundo, guardares a password de um utilizador na sessão é DE DOIDOS. Não podes fazer isso man, guarda antes o id dele, ou cria uma simples variavel a dizer se está logado ou não.

depois na página inicial só tens de fazer

if($_SESSION['nome']){
// nao mostra login
}else{

//mostra login
}
 
se for uma hash, não tem mal.

aliás, sistema de cookies, eu normalmente, guardo partes especificas da hash da pass, parte essa que depende da length do username.
 
se for uma hash, não tem mal.

aliás, sistema de cookies, eu normalmente, guardo partes especificas da hash da pass, parte essa que depende da length do username.

sim mas duvido que seja, ele está a associar logo os valores do post á session, portanto acho que ele está mesmo a guardar a palavra chave sem ser em hash.

Mas também para te confessar, quando falei, nem me lembrei da hash . Bem visto :)



Podes explicar melhor como fazes e o que é isso de guardar partes da hash e a dependência do lenght do username ?!
Cumps
 
$hash = "d41d8cd98f00b204e9800998ecf8427e";
$user = strlen("Gurzi");
$hash_user = substr($hash, $user, $user);


é a base de um dos meus sistemas de cookies, é claro que para fazeres um sistema de cookies 100% seguro, é complicado...
 
Última edição:
Primeiro que tudo, o session_start() deve ser sempre a primeira instrução a ser chamada.
Correctíssimo! Jà modifiquei!

Segundo, guardares a password de um utilizador na sessão é DE DOIDOS. Não podes fazer isso man, guarda antes o id dele, ou cria uma simples variavel a dizer se está logado ou não.
Tens razão, estupidez mesmo:sad: .. Guardei apenas o id dele!

depois na página inicial só tens de fazer

if($_SESSION['nome']){
// nao mostra login
}else{

//mostra login
}

Eu coloquei o código do IF no próprio auth.php, e chamei no index.php..
Dá-me 2 erros possíveis.. ou apenas mostra o formulário, não mostrando o resto do conteúdo do index.php, ou dá o erro :
"Warning: Cannot modify header information - headers already sent by ........"


cumprimentos!
 
$hash = "d41d8cd98f00b204e9800998ecf8427e";
$user = strlen("Gurzi");
$hash_user = substr($hash, $user, $user);


é a base de um dos meus sistemas de cookies, é claro que para fazeres um sistema de cookies 100% seguro, é complicado...
Nunca se confia em cookies, o mais seguro é mesmo não os usar. Mas se é mesmo necessário, dás uma hash ao user identificativa da sessão, não metes lá info pelo meio para depois ires buscar. :)
 
Back
Topo