Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou criando um pequeno sistema de fim de semana e me deparei com um problema, originalmente não uso PHP mas fui indicado a usa isso por um amigo. Acontece que eu precisei usar os dados da sessão do navegador pra executar ações sem que o usuário tenha acesso aos dados facilmente. No PHP isso é feita com o Array $_SESSION, acontece que eu testo com um if se o usuário está logado antes de fazer as atribuições do $_SESSION, eu sei que está logado porque exibo outras coisa juntas (é basicamente um leitor de XML). Faço as atribuição na sessão e imprimo o array com print_r, aparentemente está tudo bem: imprime todos os dados que coloquei no array. Imprimi ele no header da página, e ai surge um problema: com o print_r o resultado é diferente, é como se os dados que armazenei dentro do if fossem "dessetados" (com um unset, sei lá, mas nem uso unset). Apenas dados que incluo no array fora dos ifs ficam no ficam no array, eu acho que não entendi como funciona o $_SESSION então. Alguém pode me explicar porque esse erro ocorre? Ou alguém sabe como passar os dados pra outra página (o método POST não é bom porque o usuário pode alterar os inputs, mesmo ocultos, passar pelo url com get dá o mesmo problema)?
Pois é, eu considerei postar o script, mas ele é meio grande, tem 1521 linhas e o erro meu poderia não estar no local próximo das minhas atribuições. Quanto a paragrafação do meu texto, desculpe, português não é meu forte. Eu meio que resolvi, mas ainda não sei porque isso acontece. Basicamente eu tirei um if (reduzindo o numero de funções), fiz um negócio qua na minha cabeça força a variável a ser uma string (não me culpem, eu não programo em PHP é só um projeto pra teste) e dei um session_write_close(), fica assim:
$_SESSION['nome'] = ''.$titulopod.'';
$_SESSION['feedurl'] = ''.$feedurl.'';
$_SESSION['imgassin'] = ''.$imgdef.'';
$_SESSION['trackid'] = ''.$trackid.'';
session_write_close();
Resolveu meu problema, porém fico com a impressão que é uma 'gambiarra' isso.Eu não sou expert em PHP e como o Moderador disse ta meio confuso, mas vou falar pelo o que eu entendi..
Creio que quando você seta dentro do IF, só vai estar valendo dentro dele, no caso so $_SESSION, que é um pouco chato de usar, o que eu fiz no meu projeto:
Eu verificado se ele está logado, se ele não tiver eu coloco um alerta e dirijo ele pra outra pagina, e embaixo disso eu faço o set do $_SESSION.
Pode ser que seja uma gambiarra, mas foi o jeito que encontrei para fazer funcionar. Pode ser que alguém mais experiente fala que não pode fazer isso ou que tem um jeito melhor, contudo acho melhor esperar outras respostas..
Se você quer forçar um tipo basta:
$bla = 123;//int
$var = (string)$bla;//string
$var = (int)$var;//int de novo
Quanto ao que você fez, por si só não deveria afetar o resultado, já que o PHP por ser fracamente tipado não resultaria em algum erro que impedisse a sessão de ser gravada. Apenas observe que você usar o índice da sessão com o mesmo nome da variável pode te trazer problemas, se register_globals estiver ativado a sessão terá o valor automaticamente substituído pelo da variável.
Você postou 30 linhas em um único parágrafo e o script que é a coisa mais importante você não postou... assim fica difícil...