Ir para conteúdo

POWERED BY:

Arquivado

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

falcao544

Problema com session!

Recommended Posts

Eu não estou conseguindo criar duas sessions, sendo que estou tentando criá-las do mesmo modo como crio sessions em outras partes do código, mas apenas nessa parte que não vai:

 

if($num2==1){
  session_start();
  $_SESSION["email"] = $email;
  $_SESSION["senha"] = $senha_md5;

  echo"<meta http-equiv='refresh' content='0;URL=http://www.site.com/t.php'>";
  exit();
 }

 

Obs: Entra no IF sim, já que o redirecionamento acontece!

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente

if($num2==1){
  session_start();
  $_SESSION["email"] = $email;
  $_SESSION["senha"] = $senha_md5;
  session_commit();
  header("location: http://www.site.com/t.php");
  exit;
 }

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php
error_reporting(E_ALL);
ini_set('display_errors','1');
if($_SERVER["REQUEST_METHOD"]=="POST"){

function anti_injection($sql){

 $sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$sql);
 $sql = trim($sql);
 $sql = strip_tags($sql);
 $sql = addslashes($sql);

 return $sql;
}

$mail = anti_injection($_POST["email"]);
$senha = anti_injection($_POST["senha"]);

if(empty($mail) || empty($senha)){
 session_start();
 $_SESSION["mailv"] = "erro";
 echo"<script>history.go(-1)</script>";
 exit();
}


mysql_connect("HOST", "USER", "SENHA") or die(mysql_error());
mysql_select_db("BD") or die(mysql_error());

$query_mail = mysql_query("SELECT email FROM dados_usuarios WHERE email='$mail'");
$num = mysql_num_rows($query_mail);

if($num==1){

 $senha = $senha."2011";
 $senha_md5 = sha1(md5($senha));

 $query_senha = mysql_query("SELECT senha FROM dados_usuarios WHERE senha='$senha_md5'");
 $num2 = mysql_num_rows($query_senha);
 mysql_close();

 if($num2==1){
  session_start();
  $_SESSION["email"] = $email;
  $_SESSION["senha"] = $senha_md5;
  session_write_close();
  header( 'refresh:0; url=http://www.site.com/t.php' );
  //echo"<meta http-equiv='refresh' content='0;URL=http://www.site.com/t.php'>";
  exit();
 }
 elseif($num2==0 || $num==0){
      session_start();
   $_SESSION["mailv"]="c";
      echo"<script>history.go(-1)</script>";
   exit();
 }
}
else{
   mysql_close();
session_start();
$_SESSION["mailv"] = "nc";
echo"<script>history.go(-1)</script>";
exit();
}
}
else{
  echo"<meta http-equiv='refresh' content='0;URL=http://www.site.com'>";
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem certeza que o redirecionamento não era por causa do echo"<meta http-equiv='refresh' content='0;URL=http://www.site.com'>"; la nas ultimas linhas?

 

isso é para validação de user ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então voce pode dar uma melhorada, como ver na hora de selecionar o user na database, invez de criar duas mysql_query, voce pode apenas por um AND e buscar o outro valor, tirar esses redirecionamento com js é bom tambem

eu faria algo assim

<?php
error_reporting(E_ALL);
ini_set('display_errors','1');
session_start();
if($_SERVER["REQUEST_METHOD"]=="POST"){

function anti_injection($sql){

 $sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$sql);
 $sql = trim($sql);
 $sql = strip_tags($sql);
 $sql = addslashes($sql);
 $sql = htmlspecialchars($sql); // contra inserção de js

 return $sql;


}

$mail = anti_injection($_POST["email"]);
$senha = anti_injection($_POST["senha"]);

   $senha = $senha."2011";
   $senha_md5 = sha1(md5($senha));

if((!$mail) || (!$senha)){
 $_SESSION["mailv"] = "erro";
 header("location: http://www.site.com");
}else{


mysql_connect("HOST", "USER", "SENHA") or die(mysql_error());
mysql_select_db("BD") or die(mysql_error());

$query_mail = mysql_query("SELECT email FROM dados_usuarios WHERE email=\"$mail\" AND senha=\"$senha_md5\"");
$num = mysql_num_rows($query_mail);

if($num != 0){

$_SESSION["email"] = $email;
  $_SESSION["senha"] = $senha_md5;
  session_write_close();
  header( 'refresh:0; url=http://www.site.com/t.php' );

}else{

header("location: /index.php");
session_commit();
}

 mysql_close();

}
}else{
  header("location: http://www.site.com");
}


?>

 

é apenas uma limpada em coisas inuteis e desnecessria, pode ficar bem melhor

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro:

 

Remova todos os session_start e coloque apenas um no início do script.

 

Segundo:

 

Dê um var_dump( $_SESSION ); no arquivo t.php, que é para onde você está redirecionando.

<?php
session_start( );
var_dump( $_SESSION );
exit;

 

Terceiro:

 

Poste o resultado.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Cristiano, testei mas não funcionou!

 

Aquilo são apenas dicas para melhorar o script...

 

Tente ver se essas malditas sessions então sendo criadas

 

 if(isset($_SESSION['email']) && isset($_SESSION['senha'])){
  header("location: http://google.com");
  }

 

Ah, certifique que tem session_start(); na pagina t.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara a session tem de ser startada antes de todo o script....

 

não sera a melhor forma mas use o javascript para retornar

 

   if($num2==1){
  session_start();
  $_SESSION["email"] = $email;
  $_SESSION["senha"] = $senha_md5;
  session_commit();
  echo "<script> window.location = 'www.google.com.br' </script>"; 
  exit;
 }

 

se não funcionar manda uma mensagem..

 

e não esquece de remover todas as session_start, inicializa a session somente uma vez no começo do script

Compartilhar este post


Link para o post
Compartilhar em outros sites

session_start apenas inicia a sessão e pode estar em qualquer parte do script desde que seja antes de qualquer envio de cabeçalho

 

Dicas para uso de variáveis de sessão

http://forum.imasters.com.br/topic/342563-dicas-para-uso-de-variaveis-de-sessao/

 

 

lembre-se de que para fazer testes desse tipo, sempre esvazie o cache do browser utilizado e sempre teste em browsers diferentes e se possível em PCs diferentes.

 

as vezes pode ser apenas um estado do cache do browser..

 

tente também

header('location: http://localhost', true);

 

 

também faça um debug.

um modo de testar é fazer o seguinte breakpoint:

 

   session_start();
  $_SESSION["email"] = $email;
  $_SESSION["senha"] = $senha_md5;
  echo __FILE__ . ':' . __LINE__ . ' session_id ' . session_id(); exit;

 

deve retornar o path completo do arquivo, a linha e o valor de session_id()

 

numa outra página (usando outra aba) do navegador, abra a página seguinte diretamente e faça o mesmo para ver se session_id() é o mesmo.

 

 

 

mas claro, antes de tudo rode o script exibindo todos os erros conforme mencionaram acima.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cristiano ja fiz isso e sim, a página t.hp tem session_start(); logo no inicio!

 

Michael.Dev vou testar hoje a tarde!

 

Hinom vou testar hoje a tarde e posto o resultado!

 

Obrigado pela ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora funcionou! Cristiano obrigado ai pelo script, mas só uma observação, do modo como você fez, basta a senha ou o e-mail conferirem que já vai para a página seguinte e eu preciso que os dois confiram! Já to ajeitando aqui, mas obrigado! Obrigado também hinom, Michael.Dev e Carols Coelho!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, pelos testes que fiz, o seu script valida mesmo se um não conferir! Eu digitei o e-mail certo só q digitei a senha errada e mesmo assim foi! mas era só essa observação! Muito obrigado!

 

NOTA: Hinom, limpei o cache, mas mesmo assim nao funcionou aqui! Testei em outros PC's e funcionou! Aqui usei o Mozilla e o Chrome, ambos nao funcionaram! No outro PC usei o IE e pelo celular o Safari e funcionaram!

 

O que pode ser?

 

Obrigado!

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.