Ir para conteúdo

POWERED BY:

Arquivado

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

Apenas Eu

Dificuldades com session

Recommended Posts

Olá!

Faz tempo que eu não venho aqui com problemas de Session (já até tentei ajudar alguns colegas inclusive sobre isso), mas eu já tentei de tudo que eu sei e não consegui resolver o meu problema.

 

Eu fiz um programinha de carrinho de orçamento para o meu site. Ao clicar nos detalhes do primeiro produto é gerado um Session_start + uma sessão com id uníco. Daí com este id, a pessoa reune o que quer saber os preços e envia para mim. Acho que até hoje de manhã estava funcionando, mas agora já não está.

 

O problema é que, ao sair da página que gera o número de identificação o iD é perdido da página seguinte. Parece que no IE isso não acontece. Quer dizer, até o ID mantém, mas se der um refresh na página do carrinho, ele se perde.

 

Acho que tenho que aperfeiçoar a técnica. Mas o que eu não entendo, é que fiz 3 páginas testes e da mesma forma fiz as páginas do site. No teste funciona beleza, mas no site não:

 

O TESTE eu fiz assim:

teste1.php

<?php
session_start();
$id_usuario = session_id();
$_SESSION['id_usuario'] = $id_usuario;
$_SESSION['foto'] = "<img src='imagens/5slide.jpg'";
echo "$id_usuario";
?><br>
<a href="teste2.php" >teste na pagina 2</a>teste na pagina 2  

teste2.php

<?php
session_start();
echo "o id de usuario é:<br>";
echo $_SESSION['id_usuario'];
?>
<a href="teste3.php" >teste na pagina 3</a><br>
<a href="teste1.php" >teste na pagina 1</a>
?>

 

teste3.php

<?php
session_start();
echo "PAGINA 3";
echo "o id de usuario é:<br>";
echo $_SESSION['id_usuario'];
?><br>
<a href="teste2.php" >teste na pagina 2</a>
Dá para consultar o funcionamento do teste 
http://www.dcsdesenvolvimento.com.br/teste1.php
?>

Já as páginas oficiais eu fiz assim (eu vou só postar essa parte ta? Para não ficar muito grande):

 

sobre-o-produto-dcs

<?php
@session_start();
$id_usuario = session_id();
$_SESSION['id_usuario'] = $id_usuario;
echo $_SESSION['id_usuario'];
//echo "$id_usuario";
?>
<?php 

o form que envia os dados no banco de dados e que é vizualizado na pagina orcamento enviar

<?php
include "../config/orcamento-conexao.php";
$id_usuario = $_POST['id_usuario'];
$cod = $_POST['cod'];
$foto = $_POST['foto'];
$modelo = $_POST['modelo'];
$tamanho = $_POST['tamanho'];
$quantidade = $_POST['quantidade'];
$tamanho = $_POST['tamanho'];
$padrao_cores = $_POST['padrao_cores'];
$observacao = $_POST['observacao'];
$sql = "INSERT INTO `dcsd_carrinho_orcamento`.`carrinho_produtos` (`id_usuario`, `cod`, `foto`, `modelo`, `quantidade`, `tamanho`, `padrao_cores`, `observacao`) VALUES ('$id_usuario', '$cod', '$foto', '$modelo', '$quantidade', '$tamanho', '$padrao_cores', '$observacao');";
$consulta = mysql_query($sql);  
//var_dump($sql);
// redireciona o link para uma outra pagina
echo "<script>top.window.location='http://www.dcsdesenvolvimento.com.br/orcamento-lista.php';</script>";
exit;
?>

orcamento-enviar

 <?php
 @session_start();
 $_SESSION['id_usuario'] = $id_usuario;
include "config/orcamento-conexao.php";
//include "config/produtos-conexao.php";
if ( isset ( $_SESSION['id_usuario'] ) ) {$id_usuario = $_SESSION['id_usuario']; }
$orcamentos = mysql_query("SELECT * FROM carrinho_produtos WHERE id_usuario='$id_usuario'  ");
//$orcamentos = mysql_query("SELECT * FROM carrinho_produtos");
echo $id_usuario;
?> 

orcamento-enviar3

 

<?php
@session_start();
$_SESSION['id_usuario'] = $id_usuario;
include "config/orcamento-conexao.php";
//include "config/produtos-conexao.php";
//if ( isset ( $_SESSION['id_usuario'] ) ) {$id_usuario = $_SESSION["id_usuario"]; }
$orcamentos = mysql_query("SELECT * FROM carrinho_produtos WHERE id_usuario='$id_usuario'  ");
echo "id";
echo $_SESSION['id_usuario'];
echo $id_usuario;
//$orcamentos = mysql_query("SELECT * FROM carrinho_produtos");
// $orcamentos = mysql_query("SELECT * FROM carrinho_produtos WHERE id_usuarios='{$_SESSION['ID']}'");
?>

Tudo isso dá para ver o funcionamento aqui http://dcsdesenvolvimento.com.br/detalhes/cartoes-visita-couche-250g/108

 

Inclusive o cód gerado está "aberto" para visualizar ao topo do site.

 

Quem puder dar uma ajudinha mais uma vez. Se for necessário eu posto o resto dos cód....obrigado emm

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu vou tentar, mas eu tava pensando aqui: O site possui outro sistema que usa session_start - o de login. Deu um trabalhinho mas agora ele funciona certinho, será que se fosse essa chave, não era para funcionar nenhum né? Ou não?


Como eu imaginei, a ideia não funcionou....

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu não entendi bem seu código, mais ha a necessidade de declarar novamente a cada pagina o a $_session['id_session']; ? por ser uma sessão ela vai se manter até o termino. não ?

 

confere se não a em nenhum lugar do código uma unset() com a session, ou uma session_destroy, pois eu tive um problema desse que perdi 1 semana, (vergonhoso eu dizer isso).

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu não entendi bem seu código, mais ha a necessidade de declarar novamente a cada pagina o a $_session['id_session']; ? por ser uma sessão ela vai se manter até o termino. não ?

 

confere se não a em nenhum lugar do código uma unset() com a session, ou uma session_destroy, pois eu tive um problema desse que perdi 1 semana, (vergonhoso eu dizer isso).

 

 

Opa, ola!!

Então, eu deixei em toda as páginas para ter certeza que iria funcionar sabe?!

 

Eu só deixei um "session_destroy" na parte final do form que me envia o email, mas isso é quando fecha o orçamento. Mas esse é um outro arquivo. Só se eu tirar para ver né? Quem sabe!

 

Interessante que antes, sem querer tinha um "Sessão destruir" naquele "orcamento-enviar.php" postado aí em cima, mas a sessão não era destruída.

 

Eu te entendo, sobre perder uma semana. Esse probleminha ai ja faz 3 ou 4 dias que estou tentando resolver hehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

seu projeto trabalha com escalabilidade? multiplos servidores atendendo as requisições?

 

Sei la, como assim? Não entendi bem, hehehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perguntei isso pq session normalmente costuma ser armazenada localmente, e se houver mais de um servidor pode ocorrer de um não identificar a session armazenada em outro. É bom verificar, pois quando existem multiplos servidores, normalmente o DNS que cuida das requisições trabalha dividindo as requisições de forma balanceada. Pensei nisso pq vc disse que em seus testes funcionaram normalmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi!!

Mas daí como eu faria esse teste? Na verdade eu nem sei como faz!

 

Outro detalhe que eu acho que está comprovado: Se não eu nao incluo na tag form action o domínio do site, a Session é perdida na página seguinte. Por exemplo:

 

<form action="forms/orcamento-enviar.php">
<button type="submit">
enviar</button> 
</form>

Agora se eu fizer isso já não funciona:

 

<form action="http://www;dcsdesenvolvimento.com.br/forms/orcamento-enviar.php">
<button type="submit">
enviar</button> 
</form>

Só que o problema é que eu preciso incluir na URL o endereço inteiro visto que devido a URL amigável dos produtos, senão fizer assim, a página requisitada não é encontrada, sabe?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

It´s Winn! Congregationlashion!!!! Uhuu!!! Conseguii \\o//

 

Agora são 2:28 e finalmente consegui achar uma solução para este terrível problema. Vou postar aqui e torço para que seja de ajuda para quem passa pelo mesmo problema, porque pelo que eu vi na NET são muitos que enfrentam esse tipo de coisa...

 

Uma das coisas que fiz foi incluir isso:

<?php 
session_save_path('/home/site/sessions'); //aqui é o diretorio raiz do site. A pasta em seguida pode ser qualquer uma
//Para achar o diretorio raiz podemos descobrir por meio do script abaixo:
echo $_SERVER['SCRIPT_FILENAME'];
?>

Mas só isso não foi suficiente. Lembram que se eu incluísse o domínio na URL dos links ou do FORM ACTION não funcionava? Sendo assim eu troquei isso:

<form action="http://www;dcsdesenvolvimento.com.br/forms/orcamento-enviar.php">

Por isso:

 <form action="<?php $_SERVER['SERVER_NAME']?>/forms/orcamento-enviar.php" >

Essas duas técnicas eu tinha pensado antes, mas achei que iria dar na mesma. Mas felizmente não deu na mesma. Perdi muito tempo, mas pelo menos consegui resolver.

 

De qualquer forma eu agradeço muito a boa vontade do pessoal que postou sugestões aqui e pelos mais de 144 outros que passaram por aqui também.

 

É isso aí! Só espero que amanhã eu não tenha que "desresolver" o tópico hehehe ;)

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.