Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

WoOo

XAMPP anda a brincar com as sessões !?

Mensagens Recomendadas

WoOo

Viva,

Tenho uma aplicação online num servidor a correr linux, tudo funciona correctamente.

A mesma aplicação enquanto foi desenvolvida correu localmente na minha máquina onde utilizo o XAMPP e tudo correu bem ao longo do desenvolvimento.

Acontece que anteontem estava a mostrar (localmente pois não me encontrava com ligação à net ) a aplicação a um colega e reparo que o login não estava a funcionar correctamente.

Fiquei intrigado na altura e depois com mais calma fui tentar ver o que se passava e confesso que cada vez mais não sei o que se possa passar.

Passo a explicar o que se passa, em todas as páginas, logo no topo inicio a sessão session_start();, quando o utilizador tenta fazer login, chamo uma função signIn() envio dois parametros (username e password introduzidos), essa função valida tudo, faz tambem um session_regenerate_id(); e depois devolve algo como true or false e então, ainda no header antes de imprimir seja o que for, caso seja true envio para uma outra página, no fundo é a homepages do backoffice.

Essa página valida se o utilizador está logado e utiliza alguns dados do utilizador que foram guardados na sessão a quando do login.

Mas actualmente o que me acontece é no mínimo estranho, o utilizador faz login, mas ao chegar ao backoffice não ha nada na sessão, mas se fizer um refresh à página (F5) já lá está tudo que é suposto estar na sessão.

Isto aconteceu de um momento para o outro e o código que está online é exactamente igual ao que corro localmente. Já re-instalei o XAMPP, desactivei (comentando a linha no php.ini) a pasta /tmp onde as sessões são guardadas pois no servidor online também não tem nenhuma pasta configurada para o efeito, testei em 4 browsers, etc. e nada.

Será que isto já se passou com algum utilizador aqui do fórum?

PS: Estou a correr o XAMPP em Windows 7 (64bits)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
WoOo

Header

<?php
include ('include/functions.php');
session_start();
if (isset($_POST['signIn']))
{
  if(signIn($_POST['username'],$_POST['password']))
  { 
    header('Location: backoffice.php'); 
  }
  else 
  { 
    // tratar do erro de login
  }
}
?>

Functions

function signIn($username,$password)
{
  // validação dos dados inseridos, update na tabela de utilizador, etc
  session_regenerate_id();
  return true;
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
WoOo

Já tinha exprimentado e nada, o problema mantem-se mesmo com algo tipo:

session_destroy();
session_start();
session_regenerate_id(); 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
WoOo

É a 5.3.1

Mas o que não percebo é que isto começou a acontecer sem fazer qualquer alteraçao seja nas configurações do apache ou do php, agora começo a olhar para o windows como origem do problema mas não sei se será por aí pois desenvolvi tudo já a correr o XAMPP no windows 7

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
WoOo

Confirmo que o problema é mesmo da função de regenerate, estive a fazer uns testes e se não renovar o ID da sessão o problema já não ocorre.

Vou tentar então fazer a renovação do ID de uma forma "handmade".

Esta solução por acaso parece-me interessante, pelo menos um pouco mais simplificada ali numas partes que acho que não preciso http://www.php.net/manual/en/function.session-regenerate-id.php#87905

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.