Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
oi estou a tentar passar a validação do registo de um usuário através das sessões.
basta clicar num link e perco a sessão. ou seja, perco o login.
o index.php
tem
.....
CODE
echo "começa ->".session_start();
echo '$_SESSION-maxi ->'.$_SESSION['MAXI'].'<br>';
if(isset($_SESSION['MAXI'])){
echo "$MAXI preenchido ->".$MAXI;
echo '<br>MAXI-on = '.$_SESSION['MAXI'];
}
else
{
echo "$MAXI VAZIO ->inicia";
echo '<br>MAXI-off = '.$_SESSION['MAXI'];
}
.....
//e carregar tb a página do login.php
include ("login.php");
..............
o login.php tem
CODE
<?php
/////////////////////////////////////////
function logout(){
echo $_SERVER[’PHP_SELF’];
unset($_SESSION['SESS_MEMBER_ID']);
session_destroy();
}
//////////////////////////////////////////
//Sanitize the value received from login field
//to prevent SQL Injection
if(!get_magic_quotes_gpc()) {
$login=mysql_real_escape_string($_POST['login']);
}else {
$login=$_POST['login'];
}
//Create query
$qry="SELECT * FROM members WHERE login='$login' AND passwd='".md5($_POST['password'])."'";
$result=mysql_query($qry);
//Check whether the query was successful or not
if($result) {
if(mysql_num_rows($result)>0) {
//Login Successful
$member=mysql_fetch_assoc($result);
$_SESSION['SESS_MEMBER_ID']=$member['member_id'];
echo '<br>bem-vindo <a class="titulos">'.$member['firstname'].'</a><br>';
///////////////////////////////////////
echo "<br>qq coisa ->".$MAXI = $member['firstname']."<br>";
session_register("MAXI");
echo '<br>MAXI-despois = '.$_SESSION['MAXI'];
//////////////////////////////////////
echo '<br><a href="'.logout().'" class="titulos"> LOGOUT </a>';
}else {
//Login failed
echo '<br><a class="titulos"> LOGIN </a><br>';
?>
<!-- $_SERVER['REQUEST_URI']; -->
<form id="loginForm" name="loginForm" method="post" action="<?php echo $_SERVER['PHPSELF']; ?>" >
<a class="titulos">Utilizador: </a><input name="login" type="text" class="textfield" id="login" size="10"/><br>
<a class="titulos">Password: </a><input name="password" type="password" class="textfield" id="password" size="10"/><br>
<input type="submit" name="Submit" value="Login" />
</form>
<?php
}
}else {
die("Query failed");
}
?>
alguém consegue 1 luz nisto?
Obrigado
acredito q sim, mas possivelmente não...
de qq forma todas as páginas entram na base pela index.php
com o código
CODE
session_start();
if(isset($_SESSION['MAXI']) {
echo "olá ->".$_SESSION['MAXI'];
}
else
{
echo "vazio";
}
a página de login.php
CODE
...
echo '<br>bem-vindo <a class="titulos">'.$_SESSION['MAXI'].'</a><br>';
// q funciona após login válido
...
valido e entro.
recebo a confirmação no ecran do utilizador com a nota de boavinda (no espaço onde está o include do login.php)
o index.php deveria assumir logo a sessão. -> o q não funciona
e assim aparecer tb logo no inicio o "olá ->".$_SESSION['MAXI'];"
mas nada....é perfeitamente ignorado...
ai durezaaa....
todas as paginas q você tiver variaveis de sessions você tem de ter o session_start(), se nao nao funfa...
todas as paginas q você tiver variaveis de sessions você tem de ter o session_start(), se nao nao funfa...
Não é bem assim, apenas as que forem separadas, as que forem inclusas com um include em uma página, apenas á que receberá deverá ter o session_start(); caso contrário irá gerar um erro de header. Em fim, depende da situação.
Mais esse página de login me parece trabalhar indiidualmente, porém você deve colocar no início, antes de qualquer tag eceto a do php, o
session_start();
é.. faz um outro php separado e coloca a session_start(); logo no começo antes de qualquer linha php.. depois faz um include no começo da página!
não vi muito seu código.. mais no que deu pra ver não tinha o session_start(); no login
testa ai http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
>
é.. faz um outro php separado e coloca a session_start(); logo no começo antes de qualquer linha php.. depois faz um include no começo da página!
não vi muito seu código.. mais no que deu pra ver não tinha o session_start();
testa ai http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
Já disse, as páginas que trabalharem individualmente para ele colocar o session...
xi... acho q já descobri a asneira....
o problema era fazer um botão de logout.
os valores eram apagados no abrir da página. conclusão...
entrava
criava a sessão
destroia a sessão
...
CODE
echo '<br><a href="'.session_destroy().'" class="titulos"> LOGOUT </a>';
como devo criar este logout sem comprometer a sessão?
faça assim na página que terá o logout:
<?php
echo "<a href='?acao=sair'>SAIR</a>";
if(isset($_GET['acao'])){
session_destroy();
}
?>boa !
o link de saida é isso mesmo :D
obrigado Alaerte!
parece-me q o q falta agora é so mesmo a linha de funcionamento.
abre a pagina-> se passa o sair =destroi a sessao anterior
se são tem "sair" escreve o formulario de login
por outro lado se tem session [maxi] - dá as boas vindas ao utilizador
se não tem a sessão
mete o formulario de login...
será q é isto??
CODE
<?php
if(isset($_GET['accao'])){
session_destroy();
}
if(isset($_SESSION['MAXI'])) {
echo '<br>bem-vindo <a class="titulos">'.$_SESSION['MAXI'].'</a><br>';
echo "<a href='?accao=sair' class='titulos'> SAIR </a>";
}
else {
//////////////////////////////////////////////////////////
//Create query
$qry="SELECT * FROM members WHERE login='$login' AND passwd='".md5($_POST['password'])."'";
$result=mysql_query($qry);
//Check whether the query was successful or not
if($result) {
if(mysql_num_rows($result)>0) {
//Login Successful
$member=mysql_fetch_assoc($result);
$_SESSION['MAXI'] = $member['firstname'];
}
else {
//Login failed
echo '<br><a class="titulos"> LOGIN </a><br>';
?>
<!-- $_SERVER['REQUEST_URI']; -->
<form id="loginForm" name="loginForm" method="post" action="<?php echo $_SERVER['PHPSELF']; ?>" >
<div style="width: 70px; float:left;">
<a class="titulos">Utilizador: </a>
</div>
<div style="width: 70px; float:left;">
<input name="login" type="text" class="textfield" id="login" size="10"/><br>
</div>
<div style="width: 70px; float:left;">
<a class="titulos">Password: </a>
</div>
<div style="width: 70px; float:left;">
<input name="password" type="password" class="textfield" id="password" size="10"/><br>
</div>
<div style="width: 100px; float:right; margin-top: 5px;">
<input type="submit" name="Submit" value=" entrar " class="textfield" />
</div>
</form>
<?php
}
}
else { die("Query failed");
}
}
?>
alguma ideia para meter isto a bombar?
Não estou nem te entendendo mais... explica direito, tu pegou esse código pronto não é ?
hehe não.
tenho visto como se faz e estou a tentar.
o problema é os erros são constantes e nunca tinha trabalhado com sessoes...dai a asneira.
Quer o link de como fazer um sistema de login ? trabalha com session... é uma vídeo aula.
Só lembrando, se for colocar mais de um link com a variavel " acao " terá que efetuar uma troca em seu script de logout.
ok.manda o link da video aula, pf.
o video é mt bom.
o problema é q, tal como tudo o q encontrei até agora faz a validação do utilizador e reencaminha para outra página.
no meu caso pretendo q o login sirva unicamente para revelar preços de produtos q já estão visiveis.
ou seja:
faz login e vê os preços.
não faz login, vê os produtos sem preços.
nos produtos é simples aparecer ou não. basta q exista a sessão.
o problema é fugir das header...
dureza?
eis o código todo do login segundo o video + algumas alterações...
CODE
<?php
//////adptado//////
if(isset($_GET['accao'])){
if (isset($_GET['accao']) == "logoff"){
session_unset();
session_destroy();
}
}
////adaptado ///////
if (isset($_GET['accao'])){
if ($_GET['accao'] =="login"){
if (isset($_POST['login'])){
if (empty($_POST['login'])){
$erro[] = "Informe o seu login.";
}
} else {
$erro[] = "Informe o seu Login";
}
if (isset($_POST['senha'])){
if (empty($_POST['senha'])){
$erro[] = "Informe a sua senha.";
}
} else {
$erro[] ="Informe a sua senha";
}
if (!isset($erro)){
$login = addslashes(htmlentities($_POST['login']));
$senha = addslashes(htmlentities($_POST['senha']));
$sql_login ="SELECT * FROM users WHERE login = '$login' AND senha = '$senha'";
$exe_login = mysql_query($sql_login, $connect) or die ("erro ao executar sql");
$num_login = mysql_num_rows($exe_login);
if ($num_login > 0){
$reg_login = mysql_fetch_array($exe_login, MYSQL_ASSOC);
if(isset($_GET['accao'])){
if ($_GET['accao'] == "logoff"){
session_unset();
session_destroy();
}
}
$_SESSION['maxi'] = $reg_login['nome'];
$_SESSION['login'] = $reg_login['login'];
$_SESSION['senha'] = $reg_login['senha'];
echo '<br><br>bem-vindo <a class="titulos">'.$_SESSION['maxi'].'</a><br>';
echo "<br><br><a href='?accao=logoff' class='titulos'> SAIR </a>";
} else {
$erro[] = "Usuário e/ou senha invalido(s),";
}
}
}
}
?>
<?php
if (isset($erro)){
for ($i=0; $i<count($erro);$i++){
echo $erro[$i]."<br>";
}
}
?>
<form method="post" action="<?php $_SERVER['PHPSELF']?>?accao=login" >
<div style="width: 70px; float:left;">
<a class="titulos">Utilizador: </a>
</div>
<div style="width: 70px; float:left;">
<input name="login" type="text" class="textfield" id="login" size="10"/><br>
</div>
<div style="width: 70px; float:left;">
<a class="titulos">Password: </a>
</div>
<div style="width: 70px; float:left;">
<input name="senha" type="password" class="textfield" id="senha" size="10"/><br>
</div>
<div style="width: 100px; float:right; margin-top: 5px;">
<input type="submit" name="Submit" value=" entrar " class="textfield" />
</div>
</form>agora basta dar um session_start nas paginas seguintes e coloca isso
$select = "seuselect para o usuario ver os produtos";
if(isset($_SESSION['secao'])){
echo $select['preco'];
}
prontin
oi!
já alterei o código novamente :D
MT bom esta corrida!!!
já funciona certinho.
obrigado...
[Resolvido]
Tá botando o session_start() certinho em todas as páginas?