Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ILR master

Trabalhando com session

Recommended Posts

Boa tarde pessoal, tudo bem com vocês?

 

Minha dúvida é a seguinte:

 

Tenho um arquivo chamado principal, onde a estrutura é da seguinte forma:

 

<body>
<? include("cabeca.php")?>
<div id="pontinhos655x20"></div>
<? include("corpo.php")?>
<div id="pontinhos655x20"></div>
<? include("rodape.php")?>
</body>
No arquivo cabeca.php eu chamo a função session_start(), verifico o usuário,e dá tudo certo... porém, eu preciso fazer a mesma coisa no arquivo corpo.php, mas quando chamo a função session_start()... dá erro,
Alguém pode me ajudar? Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, obrigado por responder Thomas.... eu até imaginei isso, mas quando chamo a session no corpo,php não aparece nada... o código é o seguinte:

 

require_once('classes/BD.class.php');
BD::conn();
$pegarUsuarioLogado = BD::conn()->prepare("SELECT * FROM usuarios WHERE cod_usuario = ? AND email = ?");
$pegarUsuarioLogado->execute(array($_SESSION['codigo'], $_SESSION['email']));
if($pegarUsuarioLogado->rowCount() <= 0){
//echo "ocorreu ao logar";
//exit;
}else{
$usuarioLogado = $pegarUsuarioLogado->fetchObject();
}
Precisa colocar algum código pra capturar a session?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi, primeiro você disse que estava dando erro agora disse que não aparece nada?? Aparentemente não há erros no seu código, se você está iniciando a sessão no outro arquivo está correto, mas você tem certeza de que os valores estão na sessão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim... o erro aparece quando eu uso session_start() no corpo.php, mas se eu não usar, ele não consegue identificar a variável $_SESSION['email'] que já está sendo inicializada na cabeca.php

 

No arquivo cabeca.php, inicia a session_start() e verifica se o usuário existe, e me retorna o usuário, tudo certinho... mas no arquivo corpo, se usar session_start() novamente dá erro, se não usar, não consigo resgatar a variável $_SESSION['email'], entendeu?

 

Minha pergunta é, como conseguir resgatar a variável $_SESSION['email'] no corpo.php sem usar session_start() ????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como eu disse, se você está inciando a sessão em outro arquivo não tem porque não funcionar, e realmente esqueça chamar o session_start() novamente, o que você poderia fazer é no final do seu arquivo "cabeca.php" chamar session_close() ai você poderia chamar o session_start() em outro arquivo. Uma prática que não recomendo, mas se quiser tentar para iniciar a sessão é pelo .htaccess com os parâmetros:

 

php_value session.auto_start 1

Ele vai iniciar a sessão pra você automaticamente, sem precisar chamar de nenhum session_start().

 

Tente também dar um print_r($_SESSION) para ver como está o conteúdo. Se não funcionar poste o código do arquivo onde você manda os dados para a sessão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, obrigado Marcielo! Seguinte:

 

o arquivo login.php está assim:

 

$_SESSION['codigo'] = $usuario->cod_usuario;
$_SESSION['senha'] = stripslashes($usuario->senha);
esse arquivo cria as sessões $_SESSION['codigo'] e $_SESSION['senha']
o arquivo cabeca.php está assim:
session_start();
require('classes/BD.class.php');
BD::conn();
$pegarUsuarioLogado = BD::conn()->prepare("SELECT * FROM usuarios WHERE cod_usuario = ? AND senha = ?");
$pegarUsuarioLogado->execute(array($_SESSION['codigo'], $_SESSION['senha']));
if($pegarUsuarioLogado->rowCount() <= 0){
//echo "ocorreu ao logar";
//exit;
}else{
$usuarioLogado = $pegarUsuarioLogado->fetchObject();
}
esse arquivo funciona perfeitamente...
o arquivo htaccess está assim:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.(.*) [NC]
RewriteRule ^(.*) http://%1/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?pg=$1 [NC,L]

 

 

 

Te pegunto? Como resgatar a session no arquivo corpo.php sem usar session_star???? Pode me fazer um modelo?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que o @Landerson Almeida disse é certo, você está mandando para a sessão código e senha e não o email, talvez seja esse o problema. Também há algum session_start() em algum outro arquivo antes de chamar o "login.php"? Se você passar valores como $_SESSION['nome_variavel'] = "valor" sem antes iniciar a sessão os dados também não vão para ela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, na página login.php, eu crio duas sessões:

 

$_SESSION['codigo'] e $_SESSION['senha'];

 

Nesta mesma página, antes de criar as sessões eu inicio session_start();

 

Se codigo e senha forem verdadeiros, o usuário é redirecionado para página principal.php, que tem o seguinte código:

 

<? include("cabeca.php")?>
<div id="pontinhos655x20"></div>
<? include("corpo.php")?>
<div id="pontinhos655x20"></div>
<? include("rodape.php")?>

 

 

Na página cabeca.php, tem o seguinte código:

 

session_start();
require('classes/BD.class.php');
BD::conn();
$pegarUsuarioLogado = BD::conn()->prepare("SELECT * FROM usuarios WHERE cod_usuario = ? AND senha = ?");
$pegarUsuarioLogado->execute(array($_SESSION['codigo'], $_SESSION['senha']));
if($pegarUsuarioLogado->rowCount() <= 0){
//echo "ocorreu ao logar";
//exit;
}else{
$usuarioLogado = $pegarUsuarioLogado->fetchObject();
}
... até aqui tudo funciona perfeitamente. Ele reconhece as sessions e me retorna o nome de usuário referente a elas, etc!
O lance é na página corpo.php que vem logo abaixo. Se eu repetir o mesmo código da página cabeca.php, dá o seguinte erro:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/yesmaril/public_html/index.php:46) in/home/yesmaril/public_html/inserir_classificado.php on line 2
... se eu não usar session_start(), ele não reconhece as sessions $_SESSION['codigo'] e $_SESSION['senha'], mas elas existem, porque na página cabeca.php tudo funciona perfeitamente...
Deu pra entender agora? Eu preciso achar uma maneira de verificar se as sessions existem sem usar session_start() na página corpo.php
Espero que possam me ajudar!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Antes de mais nada... session_start() fica na primeira linha, acima de qualquer saída para o navegador, se o seu session_start() está na pagina "cabeca.php", que segundo o primeiro post já tem coisa antes, ai não vai funcionar mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já me deparei uma vez com esse erro, isso geralmente acontece quando você roda o código em servidores Linux (Eu havia desenvolvido no Windows), não sei ao certo qual o motivo, mas como o @ESerra disse o session_start() deve estar na primeira linha, de preferência no seu principal.php, se mesmo assim não funcionar tente também limpar o buffer de saída antes de iniciar a sessão, assim:

 

<?php
   ob_start();
   session_start(); 

   //código com o uso da sessão
   ...

   ob_end_flush();
?>

 

Na época que tive esse erro, utilizei auto iniciar a sessão pelo .htaccess e funcionou. Se de todas as formas não funcionar tente acrescentar esta linha no fim do seu .htaccess:

php_value session.auto_start 1

O apache iniciará a sessão pra você, assim você não precisa utilizar o session_start() em nenhum local.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala galera... Desculpa aí, eu realmente tava moscando!!! Entendi o que me disseram, e coloquei o session_star() na primeira linha do arquivo principal.php e deu tudo certo.

 

Mas obrigado ela ajuda de vocês.

 

Abraços!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Senhores por favor, tem mais de 1 milhão de artigos, tutoriais, comentários, debates, etc, informando que o session_start() tem que estar no início do código :upset: Vamos dar uma estudada mais afundo nas funções e compreendê-las, se o amigo ESerra não os informa, vocês estariam descutindo até agora sobre o erro.

 

Seguinte, aproveitem e leiam aqui: :seta: http://forum.imasters.com.br/topic/229485-tratamento-de-erros/

 

:seta: http://forum.imasters.com.br/topic/375491-erros-comuns-com-php/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria mais útil se dissesse porque acontece o erro se não estiver no início, há alguns anos quando lidei com isso resolvi fazer alguns testes e vi que somente no servidor Linux acontece isso, servidor Windows pode-se iniciar a sessão em qualquer local que nenhum erro é apresentado. Na questão de estar no início do código eu já sabia, no código que ele havia postado se você parar e ler melhor verá que está no início do código. Mas quando ele postou a mensagem de erro confirmei que era realmente esse o problema. Enfim.. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria mais útil se dissesse porque acontece o erro se não estiver no início, há alguns anos quando lidei com isso resolvi fazer alguns testes e vi que somente no servidor Linux acontece isso, servidor Windows pode-se iniciar a sessão em qualquer local que nenhum erro é apresentado. Na questão de estar no início do código eu já sabia, no código que ele havia postado se você parar e ler melhor verá que está no início do código. Mas quando ele postou a mensagem de erro confirmei que era realmente esse o problema. Enfim.. ;)

No post #1 ele colocou de forma bem clara...

 

<body>

 

<? include("cabeca.php")?>

 

<div id="pontinhos655x20"></div>

 

<? include("corpo.php")?>

 

<div id="pontinhos655x20"></div>

 

<? include("rodape.php")?>

 

</body>

 

No arquivo cabeca.php eu chamo a função session_start(), verifico o usuário,e dá tudo certo...

 

 

Tinha um body antes, o que dá idéia de que antes ainda tinha um head... ou seja, tinha muita coisa... além do que, isso não está relacionado a servidor linux/windows... você pode configurar o PHP para segurar o buffer ou para sempre iniciar a sessão e voilà tudo irá funcionar... mas essa não é a configuração padrão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça cada pagina sua dar um echo em TODAS sessions que existir, repetidamente, cada arquivo vai ter echo de todas.

 

Assim verá se não esta capturando alguma session

 

Depois de ter todas session capturadas com certeza em cada pagina,

 

passe elas para uma variavel e continue seu codigo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@ESerra ok admito, foi uma falha minha não ter visto o <body> ¬¬ reconheço, mas enfim, tópico resolvido!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.