Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ai pessoal!
Estou aqui com um problema o cookie que criei não grava a session por muito tempo ele cria o cookie e tudo diz que expira daqui a 1 ano mas se espero 1hora mais ao menos, ja nao esta gravada a session...
Isto é o que tenho no CriaLogin.php que é quando o user faz login cria o cookie...
$email = mysql_real_escape_string($_POST['email']);
$password = mysql_real_escape_string($_POST['password']);
...
$resultado = mysql_fetch_assoc($query);
if (!isset($_SESSION)) session_start();
$_SESSION['id'] = $resultado['id'];
$_SESSION['u_email'] = $resultado['email'];
$_SESSION['u_nome'] = $resultado['nome'];
if(isset($_POST['lembrar'])){
setcookie("lembrar", $email, time()+(60*60*24*365));
}
header("Location: index.php?id={$_SESSION['id']}&nome={$_SESSION['u_nome']}"); exit;
}
E isto é o que meto nas paginas
<?php
ob_start();
session_start();
include ("Includes/Conexao.php");
if (isset ($_COOKIE['lembrar']) && !isset ($_SESSION['u_email'])){
$_SESSION['u_email'] = $_COOKIE['lembrar'];
}
if (!isset ($_COOKIE['lembrar']) && isset ($_SESSION['u_email'])){
$_COOKIE['lembrar'] = $_SESSION['u_email'];
}
?><?php
ob_start();
error_reporting(E_ALL);
ini_set("display_errors", 1);
include ('../Includes/Conexao.php');
require_once('funcoes.php');
$email = mysql_real_escape_string($_POST['email']);
$password = mysql_real_escape_string($_POST['password']);
if (!empty($_POST) && (empty($_POST['email']) || empty($_POST['password']))) {
echo "<script> alert('O email e a password sao obrigatorios!');</script> <div id='erros'>Estas a ser redirecionado...</div> <meta http-equiv='refresh' content='0; url=inicio.php'>"; exit;
}
$sql = "SELECT `id`,`nome`,`email`,`idade` FROM `registos` WHERE (`email` = '". $email."') AND (`password` = MD5('".$password."'))";
$query = mysql_query($sql);
if (mysql_num_rows($query) != 1) {
echo "<script> alert('Verifica se prenches-tes correctamente todos os dados!');</script> <div id='erros'>Estas a ser redirecionado...</div><meta http-equiv='refresh' content='0; url=inicio.php'> "; exit;
} else {
$resultado = mysql_fetch_assoc($query);
if (!isset($_SESSION)) session_start();
$_SESSION['id'] = $resultado['id'];
$_SESSION['u_email'] = $resultado['email'];
$_SESSION['u_nome'] = $resultado['nome'];
if(isset($_POST['lembrar'])){
setcookie("lembrar", $email, time()+(60*60*24*365));
}
header("Location: ouvinte/index.php?id={$_SESSION['id']}&nome={$_SESSION['u_nome']}"); exit;
}
?>if (!isset($_SESSION)) session_start();
Se você quer saber se a session está inicada, você deve colocar o session_start(); antes do IF!
Se você usa o ob_start(); você deve colcoar o ob_end_flush(); no final do código!
Poste o código onde usa o cookie para saber se o usuário tá logado ainda ou não!
O codigo é este ja o tinha la em cima ;)
<?php
ob_start();
session_start();
include ("Includes/Conexao.php");
if (isset ($_COOKIE['lembrar']) && !isset ($_SESSION['u_email'])){
$_SESSION['u_email'] = $_COOKIE['lembrar'];
}
if (!isset ($_COOKIE['lembrar']) && isset ($_SESSION['u_email'])){
$_COOKIE['lembrar'] = $_SESSION['u_email'];
}
?>
ah e tenho isto se o membro estiver desconnectado e quiser acessar ao perfil através do link fiz assim:
<?php
ob_start();
session_start();
include ("../Includes/Conexao.php");
if (isset ($_COOKIE['lembrar']) && !isset ($_SESSION['u_email'])){
$_SESSION['u_email'] = $_COOKIE['lembrar'];
}
if (!isset ($_COOKIE['lembrar']) && isset ($_SESSION['u_email'])){
$_COOKIE['lembrar'] = $_SESSION['u_email'];
}
$dados = mysql_query("SELECT `nome`,`nick`,`idade`,`msn`,`pais`,`site` FROM `registos` WHERE `id`={$_SESSION['id']}");
if(!mysql_num_rows($dados))
header("LOCATION: sair.php");
$dados = mysql_fetch_assoc($dados);
?>Bom achei o problema! Você usa o $_SESSION['id'] para fazer a query, sendo que a $_SESSION['id'] depois que você fehcar o browser não existirá mais! Então use o $_COOKIE!
Exemplo:
$dados = mysql_query("SELECT `nome`,`nick`,`idade`,`msn`,`pais`,`site` FROM `registos` WHERE `email`={$_COOKIE['lembrar']}");
E use:
if(mysql_num_rows($dados)==0)
Poste o código todo por favor!