Jump to content
M3gNa

Session PHP

Recommended Posts

M3gNa

Boas pessoal. Teho um problema nas sessões do meu site. Eu inicio sessão e ele grava os dados da sessão navego pelas páginas etc. Depois se fizer logout e aceder a uma página aquilo mostra como se a sessão estivesse activa e pelos vistos está.

Já dei voltas e voltas e não estou a ver onde é o problema  :confused:

Já aconteceu a alguém isto? Estou a usar o EasyPHP 5.3.6.

Share this post


Link to post
Share on other sites
kareka

session_destroy() ?

Como é que é o teu código de logout ?


<?php include("assinatura.txt"); ?>

Share this post


Link to post
Share on other sites
M3gNa

Sim tenho o session_destroy().

Código é este:

<?php
session_destroy();
header('Location: index.php');
?>

Share this post


Link to post
Share on other sites
kareka

Exacto , assim deves ter o problema resolvido .


<?php include("assinatura.txt"); ?>

Share this post


Link to post
Share on other sites
M3gNa

Embora pareça impossivel, não resolveu o problema!  :confused:

Continua a ter o mesmo problema. Login->Sessão iniciada->Navegação->Logout->Sessão activa na mesma  :dontgetit:

Share this post


Link to post
Share on other sites
kareka

Como é que tu controlas se a sessão está activa ou não ?


<?php include("assinatura.txt"); ?>

Share this post


Link to post
Share on other sites
M3gNa

Eu não apanho muito de PHP, sou mais virado para linguagens tipo vb c++ c# etc...

Mas tenho de fazer uma trabalho para a disciplina :/

O meu login é assim

<?php
     if (!isset($_SESSION))
     {
     session_name("sessao");
     ob_start();
     session_start();
     }
?>
<html>
<head>
       <meta http-equiv="content-style-type" content="text/css">
       <link rel="stylesheet" href="style.css" type="text/css" media="screen"/>
</head>
<body>
        <?php
           require_once('ligarbd.php');
	   
	   $email=$_POST['email'];
           $password=$_POST['password'];
	   
           $consulta="SELECT * FROM utilizadores WHERE email='".$email."' AND password='".$password."' ";
           $resultado=mysql_query($consulta);
           $registo=mysql_fetch_array ($resultado);
           $nregistos=mysql_num_rows($resultado);
	   
	   $primeironome=$registo['primeironome'];
	   $ultimonome=$registo['ultimonome'];
	   
           if ($nregistos == 1)
           {
	   $_SESSION['grau'] = '2';
	   $_SESSION['primeironome'] = $primeironome;
	   $_SESSION['ultimonome'] = $ultimonome;
           require_once('inicio.php');
           }
           else
           {
           require_once('index.php');
        ?>
        <script>
        window.alert("Dados Incorrectos")
        </script>
        <?php
           }
        ?>
                        
</body>
</html>

Depois a página inicio é esta:

<?php
     if (!isset($_SESSION))
     {
     session_name("sessao");
     ob_start();
     session_start();
     }

if ($_SESSION['grau']!='2') {
header("Location: index.php");
} else {
?>
<html>
<head>
    <meta http-equiv="content-style-type" content="text/css">
    <link rel="stylesheet" href="style.css" type="text/css" media="screen"/>

</head>
<body>
<div id="container">
<div id="header">
</div>
<div id="navigation">
	<ul align=center>
		<li><a href="#">Home</a></li>
		<li><a href="#">Promoções</a></li>
		<li><a href="#">PC</a></li>
		<li><a href="#">Xbox 360</a></li>
		<li><a href="#">Playstation 3</a></li>
		<li><a href="#">Nintendo Wii</a></li>
		<li><a href="contacto.php">Contacte-nos</a></li>
	    <li><?php if ($_SESSION['grau'] =='2') { ?> <a href="logout.php">Logout</a> <?php } ?></li>
	</ul>
</div>
<div id="content-container">
	<div id="content">
		<h2>
			Page heading
		</h2>
		<p>
			Lorem ipsum dolor sit amet consect etuer adipi scing elit sed diam nonummy nibh euismod tinunt ut laoreet dolore magna aliquam erat volut. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
		</p>
		<p>
			Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
		</p>
		<p>
			Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.
		</p>
	</div>
	<div id="aside">
		<br />
        <table border="0" width="100%" >
			<tr>
				<td align=right><?php include 'menubemvindo.php'; ?></td>
			</tr>
		</table>
	</div>
	<div id="footer">
		Copyright © Gaming Hardcore, 2011
	</div>
</div>
</div>
<!-- Fim de Verificar a Sessão -->
<?php } ?>
<!------------------>
</body>
</html>

Se quiserem passo o site compactado com a base de dados. É um problema que ando às voltas e voltas. Nem a minha stora consegue descobrir o que é :/

Share this post


Link to post
Share on other sites
M3gNa

Podes-me dizer então a parte que está mal sffv?

Obrigado já agora.

É a parte do inicio em cima não é?

Share this post


Link to post
Share on other sites
kareka

Quando fazes o isset($_SESSION) , não estás a especificar que sessão é que deve ser testada .

Por exemplo, crias uma variável de sessão $_SESSION['INI'] que está a 1 ou a 0, conforme o utilizador está logado ou não, respectivamente .

Aliás , se fosse a ti , criava um ficheiro de validação de sessão que é chamado em cada página para testar se o utilizador está logado ou não .


<?php include("assinatura.txt"); ?>

Share this post


Link to post
Share on other sites
M3gNa

Fiquei confuso novamente :confused:

yoda, qual a parte que devo remover para não estar sempre a iniciar sessão. É que o mesmo se passa na página contacto.

<?php
     if (!isset($_SESSION))
     {
     session_name("sessao");
     ob_start();
     session_start();
     }
?>

<html>
<head>
    <meta http-equiv="content-style-type" content="text/css">
    <link rel="stylesheet" href="style.css" type="text/css" media="screen"/>
<script>
	function validar(form) {
		var msg = "Os campos marcados com * são de preenchimento obrigatório.";
		if (form.pnome.value=="" || form.unome.value=="" || form.email.value=="" || form.comentario.value=="") {
			window.alert(msg);
			return(false);
			}
	}
</script>
</head>
<body>
<div id="container">
<div id="header">
</div>
<div id="navigation">
	<ul align=center>
		<li><?php if ($_SESSION['grau'] == '2') { ?> <a href="inicio.php">Home</a> <?php } else { ?> <a href="index.php">Home</a> <?php } ?></li>
		<li><a href="#">Promoções</a></li>
		<li><a href="#">PC</a></li>
		<li><a href="#">Xbox 360</a></li>
		<li><a href="#">Playstation 3</a></li>
		<li><a href="#">Nintendo Wii</a></li>
		<li><a href="contacto.php">Contacte-nos</a></li>
		<li><?php if ($_SESSION['grau'] == '2') { ?> <a href="logout.php">Logout</a> <?php } ?></li>
	</ul>
</div>
<div id="content-container">
	<div id="content">
		<form name="contactform" method="post" action="enviarcomentario.php" onSubmit="return validar(contactform)">
			<table border ="0" width="450px">
				</tr>
				<tr>
					<td valign="top">
						<label for="first_name">Primeiro Nome *</label>
					</td>
					<td valign="top">
						<input  type="text" name="pnome" maxlength="50" size="42">
					</td>
				</tr>

				<tr>
					<td valign="top"">
						<label for="last_name">Último Nome *</label>
					</td>
					<td valign="top">
						<input  type="text" name="unome" maxlength="50" size="42">
					</td>
				</tr>
				<tr>
					<td valign="top">
						<label for="email">Endereço E-mail *</label>
					</td>
					<td valign="top">
						<input  type="text" name="email" maxlength="80" size="42">
					</td>

				</tr>
				<tr>
					<td valign="top">
						<label for="telephone">Número Telemóvel </label>
					</td>
					<td valign="top">
						<input  type="text" name="telemovel" maxlength="9" size="9">
					</td>
				</tr>
				<tr>
					<td valign="top">
						<label for="comments">Comentário *</label>
					</td>
					<td valign="top">
					<textarea  name="comentario" maxlength="1000" cols="33" rows="6"></textarea>
					</td>

				</tr>
				<tr>
					<td colspan="2" style="text-align:right">
						<input type="image" src="imagens/butaocontacto.png" value="Enviar"> </a>
					</td>
				</tr>
		</table>
	</form>
	</div>
	<div id="aside">
	<?php if ($_SESSION['grau'] == '2') { ?> 
		<table border="0" width="100%" >
			<tr>
				<td align=right><?php include 'menubemvindo.php'; ?></td>
			</tr>
		</table>
	<?php } else { ?> 
	<?php include 'menulogin.php'; ?>
	<?php } ?>
	</div>
	<div id="footer">
		Copyright © Gaming Hardcore, 2011
	</div>
</div>
</div>
</body>
</html>

kareka a validação que estás a dizer é tipo esta né?

<?php if ($_SESSION['grau'] == '2') { ?> 
		<table border="0" width="100%" >
			<tr>
				<td align=right><?php include 'menubemvindo.php'; ?></td>
			</tr>
		</table>
	<?php } else { ?> 
	<?php include 'menulogin.php'; ?>
	<?php } ?>

Share this post


Link to post
Share on other sites
kareka

Há pressa ?

Se não houver pressa posso-te arranjar isso na boa mas ao final do dia que agora não estou no meu pc .


<?php include("assinatura.txt"); ?>

Share this post


Link to post
Share on other sites
M3gNa

Não há pressa  :confused: Eu espero até ao final do dia. Thanks

yoda, obrigado, mas agora da-me erro na variável da sessão grau.

Notice: Undefined index: grau in C:\Program Files (x86)\EasyPHP-5.3.6.0\www\contacto.php on line 26

Notice: Undefined index: grau in C:\Program Files (x86)\EasyPHP-5.3.6.0\www\contacto.php on line 33

Notice: Undefined index: grau in C:\Program Files (x86)\EasyPHP-5.3.6.0\www\contacto.php on line 93

Pelos vistos ele não consegue sacar a varivel grau e verificar se a sessão está activa ou não. Isto tudo na página contacto.

Share this post


Link to post
Share on other sites
kareka

Tens que definir a variável grau por default , caso não exista sessão para iniciar .


<?php include("assinatura.txt"); ?>

Share this post


Link to post
Share on other sites
M3gNa

Tens que definir a variável grau por default , caso não exista sessão para iniciar .

Entendi o que disseste, mas não sei como fazer  :confused:

Se pudesses dizias-me como +/-

Share this post


Link to post
Share on other sites
M3gNa

Obrigada yoda. O notice desapareceu  :D

Mas surgiu um outro problrma  :confused:

Agora faço login, feito, ele acede a página inicio com a sessão activa pelos vistos. Mas Quando muda para a página contacto puff, sessão foi ao ar pelo que parece  😲.

Será que aqueles notices não terão a ver com isso? É que aquilo parece erro na variável grau que não encontra e chama pelo modulo menulogin.php.

Share this post


Link to post
Share on other sites
kareka

Podes ter feito desaparecer os notices mas não fizeste desaparecer os erros .

Em vez de testares se a $_SESSION['grau'] é igual a 2 para mostrares o texto de "logout" , devias testar se a sessão está iniciada ou não . Se estiver mostras senão não mostras .


<?php include("assinatura.txt"); ?>

Share this post


Link to post
Share on other sites
M3gNa

Percebi +/- o que os 2 queriam dizer. A página que mostraste yoda este código é o que faz a validação se está activa ou não né?

<?php
session_start();

if (!isset($_SESSION["login_usuario"]) || !isset($_SESSION["senha_usuario"])) {
    // enviar o utilizador para a pagina de login
    header("Location: login.php");
} else {
    // o utilizador tem sessao iniciada e carregamos o resto da pagina
    $login_usuario = $_SESSION["login_usuario"];
    $senha_usuario = $_SESSION["senha_usuario"];
}

?>

Não me funciona, ele não avalia se a sessão está activa ou não. O código que me forneceste é parecido com o que eu já tinha.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.