Ir para conteúdo

POWERED BY:

Arquivado

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

Bobrinha

Sessão é destruída sozinha e não se mantem ao atualizar pagina

Recommended Posts

Olá colegas, estou com um problema de logica e não achei o erro ou solução, estou tentando fazer um simples formulario para pegar um valor e ordenar a query por esse valor porem quando eu atualizado a pagina a sessão não se mantem:

 

Veja todo o codigo

 

Formulario

 

<form name="FormOdenar" action="" method="post">
           <select name="ordem">
<option value="nome">Nome</option>
                        <option value="novos">Novos</option>
                        <option value="cliques">Cliques</option>
                        <option value="votos">Votos</option>
                    </select>
<input type="submit" value="Ordenar" name="ordenar">
</form>
PHP
       <?php
        $Ordem = filter_input_array(INPUT_POST, FILTER_DEFAULT);
        if (isset($Ordem) && !empty($Ordem)):
            unset($Ordem['ordenar']);
        $Ordem = implode('',$Ordem);
        
            switch ($Ordem):
                case 'novos':
                    $_SESSION['ordem'] = 'ORDER BY id DESC';
                    break;
                case 'cliques':
                    $_SESSION['ordem'] = 'ORDER BY cliques DESC';
                    break;
                case 'votos':
                    $_SESSION['ordem'] = 'ORDER BY votos DESC';
                    break;
            endswitch;
        else:
            $_SESSION['ordem'] = 'ORDER BY nome ASC';
        endif;
        ?>
Query
"WHERE id_categoria = :cat  AND ativo = 1 {$_SESSION['ordem']} LIMIT :limit OFFSET :offset"

Conforme eu clico em ordenar ele ordena conforme o que é solicitado porem ao atualizar a pagina entrar de novo na pagina etc a sessão não se mantem, como fazer para que a sessão seja mantida?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

Você reparou se isso acontece só no google chorme?

Os links que você projetou, você incluiu o endereço do site (http://www.site.com.br/link.php) ou apenas o nome da pagina (/link.php)?

 

Colega, é igual em todos navegadores, veja que não existe links, é apenas um formulário que ao ser enviado recebo o valor e crio a sessão de ordenação, funciona so na primeira pagina por exemplo como uso paginação ao clicar na segunda pagina ja perde a sessão, se eu clicar no navegador e abrir outra aba também perde a sessão, se eu apertar f5 também perde a sessão e fica na defalt

 

O session_start() você inseriu nas 2 páginas (solicitante e solicitada)?

 

Colega é um formulário de post que retorna para a mesma pagina não redireciono para nenhuma outra, como mostrado todo código acima

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rapaz ... eu fiz um teste com seu script e a sessão se mantém normalmente

<?php
session_start();
$Ordem = filter_input_array(INPUT_POST, FILTER_DEFAULT);
var_dump($Ordem);

if (isset($Ordem) && !empty($Ordem)):
    unset($Ordem['ordenar']);
    $Ordem = implode('', $Ordem);
    echo $Ordem;
    switch ($Ordem):
        case 'novos':
            $_SESSION['ordem'] = 'ORDER BY id DESC';

            echo $_SESSION['ordem'];

            break;
        case 'cliques':
            $_SESSION['ordem'] = 'ORDER BY cliques DESC';
            echo $_SESSION['ordem'];
            break;
        case 'votos':

            $_SESSION['ordem'] = 'ORDER BY votos DESC';
            echo $_SESSION['ordem'];
            break;
    endswitch;
else:
    $_SESSION['ordem'] = 'ORDER BY nome ASC';
endif;
?>


<form name="FormOdenar" action="" method="post">
    <select name="ordem">
        <option value="nome">Nome</option>
        <option value="novos">Novos</option>
        <option value="cliques">Cliques</option>
        <option value="votos">Votos</option>
    </select>
    <input type="submit" value="Ordenar" name="ordenar">
</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora fiquei mais perdido ainda, por que aqui não funciona, eu seleciono a opção mando atualizar funciona certinho salva as sessões de acordo mais é so atualizar a pagina que volta pra default , perdido agora

 

Conhece algum tipo de debug diferente ou imagina algo que possa estar dando errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Põe a sessão em um arquivo e chama ele com include nos outros.

 

Colocar num arquivo chamado _HEADER.php com os menus e tal, quando vc iniciar a sessão, este arquivo precisa estar através de um include nos demais arquivos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que menus? do que esta falando? não quero incluir nada em outra pagina, tenho tudo que preciso pra fazer em uma unica pagina, como dito e testado esta tudo funcionando porem aqui não mantem a sessão ja com o colega acima se mantem e ai não consigo entender por que

Compartilhar este post


Link para o post
Compartilhar em outros sites

O menu foi para ilustrar, rapaz, na ultima aplicação que fiz, usei este método, iniciei a sessão em um único arquivo e o incluir nos outros, funcionou tranquilo. Tenta receber os dados primeiro, fazer a condição e depois que validar uma das condições você inicia a sessão. Só uma ideia, eu tive um probleminha similar e iniciei a sessão dentro da condição, depois funfou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite, primeiramente gostaria de entender a necessidade de usar a super global $_SESSION para fazer um simples filtro. evite colocar regra de negócios em sessions, elas não foram feitas para isso.

sugiro que você passe esse parâmetro via GET mesmo no formulário. outra detalhe, nunca concatenar parâmetros diretamente na query, uma pessoa mal intencionada pode fazer SQL Injection no seu sistema facilmente. eu percebi que você está utilizando o PDO, então utiliza o bindValue para passar os parâmetros da query, o PDO monta a query internamente e isso evita qualquer dor de cabeça com SQL Injection.

 

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite, primeiramente gostaria de entender a necessidade de usar a super global $_SESSION para fazer um simples filtro. evite colocar regra de negócios em sessions, elas não foram feitas para isso.

sugiro que você passe esse parâmetro via GET mesmo no formulário. outra detalhe, nunca concatenar parâmetros diretamente na query, uma pessoa mal intencionada pode fazer SQL Injection no seu sistema facilmente. eu percebi que você está utilizando o PDO, então utiliza o bindValue para passar os parâmetros da query, o PDO monta a query internamente e isso evita qualquer dor de cabeça com SQL Injection.

 

Espero ter ajudado.

 

A necessidade é para evitar o uso de varias paginas fazendo exibição e ordenação tudo em um unico lugar, como exibido resultados por paginação não quero criar uma pagina para cada tipo de ordenação.

Passar paramentros por GET? não vejo necessidade ainda mais quando se usa sistema de url amigavel e não querer manter na url nenhum tipo de parametro, gosto de receber ja filtrado por post e sempre funcionou ate agora rsss

 

Uso PDO e foi apenas ilustração possuo classes que fazem a filtragem e validação de todas as consultas com total segurança essa é uma das grandes vantagens do PDO

 

Obrigado

 

 

OBS: fiz novos testes aqui e descobri que a sessão se mantem sim ao atualizar a página, porem quando clico na url ali em cima no navegador e aperto enter pra entrar na mesma pagina de novo ai sim a sessão se perde e volta pra default

Compartilhar este post


Link para o post
Compartilhar em outros sites

O fato de usar url's amigaveis não impacta em nada a respeito do que eu disse, em algum ponto de qualquer url amigavel está sendo passado um parâmetro via GET, isso é basico.

você não precisa criar uma página para cada tipo de ordenação, para isso existem os parâmetros, que neste caso podem passados via GET sem problemas, um exemplo seria:

 

www.meusistema.com.br/produtos/escritorio - me lista todos os produtos da categoria escritorio

www.meusistema.com.br/produtos/escritorio/10 - me lista todos o produto da categoria escritorio que possui o ID 10

 

Paginação:

 

www.meusistema.com.br/produtos/escritorio/2 - me lista todos os produtos da categoria escritorio que estão na pagina 2

 

eu testei o seu código na minha máquina e funcionou normalmente, e vai funcionar mesmo, se você testar esse PHP isolamente não tem porque não funcionar, agora no ambiente do teu sistema é outra história.

 

Por isso te disse para evitar fazer lógica nas sessions, elas foram feitas para armazenar informações temporárias e não regras de negócio. mas fica ao seu critério, só estou lhe mostrando o caminho das melhores práticas.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obg Leo porem minha dúvida agora é somente em saber por que a sessão não se mantem

 

OBS: fiz novos testes aqui e descobri que a sessão se mantem sim ao atualizar a página, porem quando clico na url ali em cima no navegador e aperto enter pra entrar na mesma pagina de novo ai sim a sessão se perde e volta pra default

 

Como manter a sessão mesmo depois de clicar na url do navegador e apertar ENTER?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Passei uma dica para ele ontem no private, so colocar um ob_start() apos o session_start() e funcionou, so marcar como 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.