montano 0 Denunciar post Postado Outubro 9, 2009 boa tarde, Dificil explicar meu problema mas vamos la.. Esta ocorrendo um Warning no meu sistema, porque eu estou enviando duas vezes para a session iniciar. index.php <?php session_start(); // Codigo que necessita da sessio; require_once('ajax.php'); ?> ajax.php <?php session_start(); // require do controller, aqui tudo é requisitado por ajax. O ajax manda requisicao para essa msm pagina require_once('controller'); ?> O problema é o seguinte, se eu tiro o session_start de ajax.php, o meu AJAX nao mantem minha variaveis de SESSION ao chamar a pagina ajax.php. ajax.js // exemplo de como funcoina //REGISTROS DE PME function buscar(form) { var xmlhttp; if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else if (window.ActiveXObject) { // code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } else { alert("Your browser does not support XMLHTTP!"); } var midia = form.busca_midia.value; var url="ajax.php"; url=url+"?busca_midia="+midia; url=url+"&acao[]=Buscar"; xmlhttp.open("GET",url,true); xmlhttp.send(null); xmlhttp.onreadystatechange=function() { if(xmlhttp.readyState==1) { $("#msg").text("Carregando dados de busca...").show().fadeOut(2000); } if(xmlhttp.readyState==2) { $("#msg").text("Iniciando Busca...").show().fadeOut(2000); } if(xmlhttp.readyState==3) { $("#msg").text("Buscando nos registro...").show().fadeOut(2000); } if(xmlhttp.readyState==4) { $("#msg").text("Busca efetuada com sucesso!").show().fadeOut(2000); document.getElementById("rsp_buscar").innerHTML=xmlhttp.responseText; } } } Eu executo minha ajax.php dentro da index.php porque eu uso o ajax.php para receber os templates do controller, e somente para isso,poise se eu chamasse direto do index.php os conteudos como menu seriam requisitados de novo pelo ajax ao controller.php. Se eu botar um iframe ao invez de require no ajax.php daria para usar o session_start dentro de uma pagina que ja usa session start? vlw Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Outubro 9, 2009 montano, Tenta colocar no seu ajax.php: <?php if ( !session_id() ) session_start(); require_once 'controller'; Compartilhar este post Link para o post Compartilhar em outros sites
vinicvo 4 Denunciar post Postado Outubro 9, 2009 Você não pode iniciar duas tags session_start(). Cada sessão é única, o que impede que você crie sessões dentro de sessões. Quando você define uma variável $_SESSION em qualquer página COM A SESSÃO ABERTA, é claro, essa variável fica disponível em TODO o seu site, basta você iniciar a sessão para utilizá-la. No caso do seu ajax, se a sessão já tiver sido iniciada, você vai poder usar as variáveis registradas normalmente. Compartilhar este post Link para o post Compartilhar em outros sites
montano 0 Denunciar post Postado Outubro 10, 2009 montano, Tenta colocar no seu ajax.php: <?php if ( !session_id() ) session_start(); require_once 'controller'; sua idéia é boa, pois esse if só sera True quando o ajax executar. Voce tem ideia porque a pagina requisitada por ajax em ajax.php que esta required na minha index nao mantem minhas SESSION do index.php? Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Outubro 10, 2009 o sistema estah mal estruturado, por isso encontrou esse tipo de situacao. encontrarah tb diversos outros problemas sugiro remodelar a estrutura. se quiser continuar desse modo, nao bastaria remover o session_start() do ajax.php e no script javascript, ao invss de chamar ajax.php, chame index.php obs: essa sugestao eh baseada nos codigos apresentados. Compartilhar este post Link para o post Compartilhar em outros sites
montano 0 Denunciar post Postado Outubro 12, 2009 hinom, Eu estou chamando ajax.php porque é a pagina que me traz somente os resultados de INSERT, DELETE, SELET, UPDATE, e a pagina index.php contem outros conteudos como menu, e etc.. se eu chamar pela index.php quando o ajax for retornar a resposta para mim,ele vai retornar a pagina index.php inteira de novo. no caso vai ficar 2 paginas uma dentro da outra, entende? Oque eu nao entendo é porque ele nao pucha a session para o ajax.php, porem se eu boto sessoin_start no ajax.php ele acha. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Outubro 12, 2009 é necessário iniciar session_start() a cada nova página, contudo, não pode repetir a chamada a session_start() numa mesma execução pois estará enviando cabeçalhos em duplicidade, provocando o conflito "headers already sent" -> cabeçalhos já enviados Compartilhar este post Link para o post Compartilhar em outros sites
montano 0 Denunciar post Postado Outubro 13, 2009 hinom, O certo seria ter session_start() somente na minha index.php pois o ajax.php é um require_once. Sendo assim parte da minha index.php e nao uma nova pagina. correto? Porem dentro da pagina ajax.php existe o AJAX fazendo requisições para a pagina ajax.php e é aqui que a coisa complica, pois quando o ajax faz a requisição ele nao inxerga a pagina ajax.php como require_once e sim como uma nova pagina, me obrigando por outro session_start() em ajax.php. Porem o erro ocorre pois para a pagina index.php vai aparecer como dois envios de session_start(). Teria como eu por o session_start() somente na hora da requisição ajax, fazendo isso nao ficaria dois session_start() na index.php. Acontece duas vezes a execução da pagina ajax.php: 1ª ela sendo require na index.php. 2ª ela sendo requisitada pelo AJAX (é aqui que me obrigo a por session_start() novamente). agradeço a ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Outubro 13, 2009 é algo simples de resolver.. precisa apenas estruturar melhor, mas resolvendo de forma rápida e sem complicações, basta utilizar um pouco de lógica. index.php <?php session_start(); require_once('ajax.php'); // aqui embaixo tem outros códigos, certo ? ?> no código javascript que chama o script ajax.php, var url="ajax.php"; url=url+"?busca_midia="+midia; adicione um parâmetro e troque ajax.php por index.php: var url="index.php"; url=url+"?ajax=1&busca_midia="+midia; no index.php, troque para index.php <?php session_start(); require_once('ajax.php'); $v = 'ajax'; if( isset( $_GET['ajax'] ) ) { exit; // isso aqui vai interromper o script restante.. executará somente o que estiver acima.. } // aqui embaixo tem outros códigos, certo ? ?> Compartilhar este post Link para o post Compartilhar em outros sites
montano 0 Denunciar post Postado Outubro 13, 2009 Certo...entendi a sua logica, atribuir um parametro na requisição para interromper os codigos que eu não quero que repita. Teria como usar a mesma logica porem assim?: No ajax.php if( isset( $_GET['ajax'] ) ) { session_start(); } vlw hinom Compartilhar este post Link para o post Compartilhar em outros sites
montano 0 Denunciar post Postado Outubro 13, 2009 Resolvido.. Valeu hinom, sua ideia me ajudou, eu fiz oque voce falou.. tirei o ajax.php fora, dechei tudo no index.php só que invez de usar o exit eu usei os scripts dentro de um if, pois tem codigo em cima e embaixo que nao podem repitir. O mais estranho disso é que eu vi agora que o erro só ocorre no momento da requisiçao AJAX. :S quando eu do um require_once da pagina ajax.php que tem session_start() tambem, ele nao da erro de 2 session_start(). Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Outubro 13, 2009 pode ser também.. desde que resolva.. Compartilhar este post Link para o post Compartilhar em outros sites