Foros del Web » Programando para Internet » PHP »

estoy creando bien la sesion?

Estas en el tema de estoy creando bien la sesion? en el foro de PHP en Foros del Web. estoy creando un login, y aparentemente todo deberia ir bien pero no funciona. tengo un archivo que verifica los datos del formulario de inicio de ...
  #1 (permalink)  
Antiguo 08/03/2014, 13:31
vis97c
Invitado
 
Mensajes: n/a
Puntos:
estoy creando bien la sesion?

estoy creando un login, y aparentemente todo deberia ir bien pero no funciona.

tengo un archivo que verifica los datos del formulario de inicio de sesion:

Código PHP:
session_start();
include 
'../includes/conexion.php';
function 
validamail($pMail) {
 
$comprobar preg_match("/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@+([_a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]{2,200}\.[a-zA-Z]{2,6}$/i"$pMail);
 if (
$comprobar) {
  return 
true;
 }
 else {
  return 
false;
 }

if (isset(
$_POST['enviar'])) { 
 
//Comprobacion del envio del nombre de usuario y contraseña.
 
$user $_POST['username']; 
 
$password $_POST['password']; 
 if (
$password == NULL) {
  echo
'contraseña vacia var 0';
 }
 else{ 
  
$isemail validamail($user);
  if(
$isemail) { 
   
$query mysql_query("SELECT * FROM users WHERE email = '$user'") or die(mysql_error); 
   
$data mysql_fetch_array($query);
   if(
$data['password'] != $password) {
    echo
'contraseña incorrecta var1';
   }
   else{ 
    
$query mysql_query("SELECT * FROM users WHERE email = '$user'") or die(mysql_error()); 
    
$row mysql_fetch_array($query); 
    
$_SESSION['s_username'] = $row['username'];
    
$_SESSION['s_iduser'] = $row['id'];
    if(
$_SESSION['s_username']){
     echo
'
<script language="Javascript">
location.href="../index.php";
</script>
     '
;
    }
    else{
    echo
'sesion no iniciada var1';
    }
   } 
  }
  else{
   
$query mysql_query("SELECT * FROM users WHERE username = '$user'") or die(mysql_error); 
   
$data mysql_fetch_array($query);
   if(
$data['password'] != $password) {
    echo
'contraseña incorrecta var2';
   }
   else{ 
    
$query mysql_query("SELECT * FROM users WHERE username = '$user'") or die(mysql_error()); 
    
$row mysql_fetch_array($query); 
    
$_SESSION['s_username'] = $row['username'];
    
$_SESSION['s_iduser'] = $row['id'];
    if(
$_SESSION['s_username']){
     echo
'
<script language="Javascript">
location.href="../index.php";
</script>
     '
;
    }
    else{
    echo
'sesion no iniciada var2';
    }
   } 
  }
 } 
}
else{
 echo
'no hay datos';

como veran el codigo al verificar la cuenta y detectar la sesion, redirecciona al directorio principal, y este tiene dos variables:

1- si hay una sesion activa muestra la interfaz usuario.
2- si no hay sesion, muestra la interfaz visitante.

pareciese que la sesion se perdiera, al redireccianar con la sesion creada deberia mostrar la interfaz usuario, pero siempre muestra la de visitante, en algunos sitios mensionan que la sesion se pierde debido a una configuracion del host, y que se soluciona con el htaccess porque el php.ini no se puede acceder en mi host.

que deberia hacer?
  #2 (permalink)  
Antiguo 08/03/2014, 14:52
lolainas
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: estoy creando bien la sesion?

Creo que te estás complicando la vida intentado reinventar la rueda.

Para eso está el atributo type y required
Código HTML:
Ver original
  1. <input name="nombre_variable_post" type="email" required />
Esto te garantiza que el formulario no se envíe si el campo está vacío y que lo que llegue al post sea exclusivamente un "email", así como el tipo email, existen muchos tipos más como: url, date, datetime, number, color, ...
Aquí tienes una buena referencia: Input types

Para crear la sesión:
Código PHP:
Ver original
  1. if($email = filter_input(INPUT_POST, 'email')) {
  2.     $user = $db->query("SELECT * FROM user WHERE email = '$email';")->fetch_assoc();
  3.     if($user['password'] == filter_input(INPUT_POST, 'password'))
  4.         $_SESSION['user'] = $user;
  5. }
  6. header('Location: index.php');

Última edición por lolainas; 08/03/2014 a las 14:57
  #3 (permalink)  
Antiguo 08/03/2014, 15:08
vis97c
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: estoy creando bien la sesion?

Cita:
Iniciado por lolainas Ver Mensaje
Creo que te estás complicando la vida intentado reinventar la rueda.

Para eso está el atributo type y required
Código HTML:
Ver original
  1. <input name="nombre_variable_post" type="email" required />
Esto te garantiza que el formulario no se envíe si el campo está vacío y que lo que llegue al post sea exclusivamente un "email", así como el tipo email, existen muchos tipos más como: url, date, datetime, number, color, ...
Aquí tienes una buena referencia: [URL="http://html5doctor.com/html5-forms-input-types/"]Input types[/URL]

Para crear la sesión:
Código PHP:
Ver original
  1. if($email = filter_input(INPUT_POST, 'email')) {
  2.     $user = $db->query("SELECT * FROM user WHERE email = '$email';")->fetch_assoc();
  3.     if($user['password'] == filter_input(INPUT_POST, 'password'))
  4.         $_SESSION['user'] = $user;
  5. }
  6. header('Location: index.php');
el problema no es eso sino, la perdida de la sesion tras haberla creado, pero gracias por la idea
  #4 (permalink)  
Antiguo 08/03/2014, 15:12
lolainas
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: estoy creando bien la sesion?

Pues he buscado en google 'htaccess php session expire' y aparte de muchos resultados más me sale este el más llamativo:

Código Apache:
Ver original
  1. <IfModule mod_php5.c>
  2. php_value session.save_path "new/username/php_sessions"
  3. php_value session.gc_maxlifetime "86400"
  4. php_value session.cookie_lifetime "86400"
  5.  
  6. </IfModule>

Y un poco más abajo esto:
Cita:
Your best bet is to set php_value session.cookie_lifetime "0" this means that the session cookie will expire only when the user closes their browser.

Etiquetas: sesión, sesiones, session
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:52.