Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
WoOo

XAMPP anda a brincar com as sessões !?

Recommended Posts

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)

Share this post


Link to post
Share on other 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;
}

Share this post


Link to post
Share on other sites
WoOo

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

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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.