Foros del Web » Programando para Internet » PHP »

Problema con Sesiones en el mismo "Server"

Estas en el tema de Problema con Sesiones en el mismo "Server" en el foro de PHP en Foros del Web. Antes que nada decirles que no son fan de poner todas mis dudas para que me las resuelvan, yo busco y cuando no hayo ni ...
  #1 (permalink)  
Antiguo 01/09/2013, 10:46
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 10 años, 9 meses
Puntos: 46
Problema con Sesiones en el mismo "Server"

Antes que nada decirles que no son fan de poner todas mis dudas para que me las resuelvan, yo busco y cuando no hayo ni para atras ni para adelante ahi si pregunto, ya busque de este tema y espero me ayuden !!!

Bien les explico y si en algo tienen consejos de seguridad les agradecere; yo implemente las sesiones en mi sistemita y lo hice asi :

Este es el codigo php del index (login) ya que el html para que lo pongo xD

Usando este tema: aporte-seguridad-basica-php- que hizo el amigo Triby logre poner en practica algunos consejos de seguridad (algunos ya que otros aun no he podido xD)

Código PHP:
Ver original
  1. <?php
  2.     session_start();
  3.     include('include/c.php');
  4.     if(!empty($_POST['user']) and !empty($_POST['pass'])){
  5.     $user = '';
  6.     $pass = '';
  7.     $user = trim($_POST['user']);
  8.     $pass = trim($_POST['pass']);
  9.         $user = $mysqli->real_escape_string($user);
  10.         $pass = $mysqli->real_escape_string($pass);
  11.         $sql = $mysqli->query("SELECT * FROM users WHERE nombre='$user' and pass='$pass' ");
  12.         if($row = $sql->fetch_array(MYSQLI_ASSOC)){
  13.    
  14.         if ($user == $row['nombre'] and $pass == $row['pass'])
  15.             {
  16.             $_SESSION['iduser'] = $row['id'];
  17.             $_SESSION['username'] = $row['nombre'];
  18.             $_SESSION['tipo_usu'] = $row['tipo'];
  19.             if(!$_SESSION['tipo_usu']=='0' ){
  20.             header('location:kosys.php');
  21.             }
  22.             else{
  23.                 header('location:error.php');
  24.                 }
  25.             }
  26.         else{
  27.         echo "<script language='JavaScript'>alert('Usuario o Password invalidos !!!');
  28.             </script>";
  29.                 }
  30.         }
  31.         else{
  32.         echo "<script language='JavaScript'>alert('Usuario o Password invalidos !!!');
  33.             </script>";
  34.             }
  35.         }
  36. ?>

Bien eso pasa a un archivo que tiene el menu y todo eso, y el codigo php es el siguiente:

Código PHP:
Ver original
  1. <?php
  2.         session_start();
  3.         include('include/c.php');
  4.         if(!$_SESSION['tipo_usu']=='1' or !$_SESSION['tipo_usu']=='2' or !$_SESSION['tipo_usu']=='3'){
  5.             header('location:error.php');
  6.         }
  7.         $tipo = '';
  8.         $tipo = $_SESSION['tipo_usu'];
  9.         if ($tipo != 1 or $tipo != 2 or $tipo != 3){
  10.             $titulo = 'Intruso';
  11.         }
  12.         if($tipo == '1'){
  13.             $titulo='Admin';
  14.         }
  15.         if ($tipo == '2'){
  16.             $titulo = 'Cajero/a';
  17.         }
  18.         if ($tipo == '3'){
  19.             $titulo = 'Usuario';
  20.         }
  21.        
  22.     mysqli_close($mysqli); //Ver el item 2 con respecto a esto por favor <====
  23. ?>

Basicamente es normal el codigo, he buscado ponerle algo de seguridad y aun me falta (quiero encriptar los passwords pero eso lo hare luego ).

Tengo el cierre de sesion asi:

Código PHP:
Ver original
  1. <?php
  2. $_SESSION['username']=NULL; //Esto esta bien ??? <===
  3. $_SESSION['tipo_usu']=NULL;   //Esto esta bien ??? <===
  4.  
  5. session_destroy();  //Esto seria redundante ??? <===
  6.  
  7. header("location:../index.php");   
  8. ?>

Y en la mayoria de archivos verifico a los usuarios y privilegios asi:

Código PHP:
Ver original
  1. <?php
  2.     session_start();
  3.     include('c.php');
  4.     if($_SESSION['tipo_usu']=='1' or $_SESSION['tipo_usu']=='2'){
  5.         // Que haga lo que tiene que hacer
  6.        }
  7.    // Si no le pongo un error que dice que no tiene privilegios.
  8.         else {
  9.             header('location:../error.php');
  10.         }
  11. ?>

El problema que me aqueja ahorita son basicamente 2 en 1:

1- Yo estoy aun en localhost y me da la cosa que si inicio sesion en otro sistema de localhost los sistemas se pasan los datos de sesion entre ellos estoy en el sistema 1 sin entrar, entro en el sistema 2 con usuario "juan" entonces en el sistema 1 pongo la ruta del archivo que sigue despues del login y me muestra el usuario juan con titulo intruso (ya que asi lo tengo yo configurado) y viseversa, quisiera saber como solucionar eso o si en un servidor web eso ya no pasaria.

2- Quiero saber si es necesario cerrar la conexión ( mysqli->close() ) en cada proceso ?? segun he leido eso quita "velocidad" al sistema y que para evitarlo debo poner variables globales o sesiones globales pero eso no lo quiero implementar aun, la cosa es cierro la conexion en cada archivo php o lo dejo asi hasta que el cliente de logout ???

En espera de su amable ayuda, espero haberme dado a entender !!!
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #2 (permalink)  
Antiguo 01/09/2013, 11:14
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con Sesiones en el mismo "Server"

1. Necesitas exponer más información, ya que la única razón para que dos sistema puedan leer la misma sesión es que estén en la misma ubicación y accedan a los mismos índices, además de que ninguna establece su propio namespace de la sesión con session_name()

2. No, no es necesario, eso se hace en automático
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 01/09/2013, 14:52
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 10 años, 9 meses
Puntos: 46
Respuesta: Problema con Sesiones en el mismo "Server"

La 2 captada !!

Con la 1, Los sistemas los tengo en la carpeta de los proyectos, osea xampp/htdocs y efectivamente tenia (tenia porq ya los cambie) los mismos indices tipo_user para ambos sistemas !!!

Habia pensado en eso pero no crei que fuese el problema eso y bueno ya ven el resultado de creer

Osea que de indices diferentes es de lo que depende que no se pasen las sesiones entre sistemas, cuando estan en una misma carpeta ?? ummm interesante !!!

Pero toma todo lo del server, pase el sistema 1 a htdocs/sistema1 y al sistema 2 lo puse en htdocs/sistemas/sistema2 y aun se pasan osea que ya en un hosting si entre dos sistemas hay mismos indices se puede dar este problema ??

Gracias pateketrueke
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #4 (permalink)  
Antiguo 01/09/2013, 16:36
 
Fecha de Ingreso: julio-2013
Ubicación: México
Mensajes: 361
Antigüedad: 10 años, 8 meses
Puntos: 55
Respuesta: Problema con Sesiones en el mismo "Server"

Hola.

1.- Las sesiones, tienes que verlas como variables; usa var_dump($_SESSION) y verás.
2.- Son variables, bueno ¿Donde se guardan?
3.- Que paginas puedes acceder al lugar donde se guardan y ¿por que?
Te sugiero revisar esta información.
http://www.php.net/manual/es/session.configuration.php

En lo personal, prefiero hacer un manejo de sesiones personalizado, ya que me ha tocado encontrarme con servidores mal configurados.

En el caso de sguridad, este aporte es muy bueno tambien.

http://www.forosdelweb.com/f18/seguridad-web-1004102/

Saludos.
  #5 (permalink)  
Antiguo 02/09/2013, 11:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problema con Sesiones en el mismo "Server"

Para PHP no existen "sistemas", aunque los cambies de carpeta son scripts PHP, por lo que si usas el nombre de sesión por defecto, es por eso que se "comparten".

La forma correcta de diferenciar los nombres es así usando session_name para que cada "sistema" tenga un nombre de sesión independiente y no exista colisión de nombres de variables.

Saludos.
  #6 (permalink)  
Antiguo 02/09/2013, 22:54
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 10 años, 9 meses
Puntos: 46
Respuesta: Problema con Sesiones en el mismo "Server"

Cita:
Iniciado por GatorV Ver Mensaje
Para PHP no existen "sistemas", aunque los cambies de carpeta son scripts PHP, por lo que si usas el nombre de sesión por defecto, es por eso que se "comparten".

La forma correcta de diferenciar los nombres es así usando session_name para que cada "sistema" tenga un nombre de sesión independiente y no exista colisión de nombres de variables.

Saludos.
Excelente buscare la forma correcta de implementar la sesion_name()

Y aca esta (realmente busque muy rapido )

Basicamente mi manejo de sesiones es:

Código PHP:
Ver original
  1. <?php
  2.     session_start();
  3.     include('c.php');
  4.     if($_SESSION['tipo_usu']=='1' or $_SESSION['tipo_usu']=='2'){
  5.         // Que haga lo que tiene que hacer
  6.        }
  7.    // Si no le pongo un error que dice que no tiene privilegios.
  8.         else {
  9.             header('location:../error.php');
  10.         }
  11. ?>

Busque y haye dos soluciones, la primera es normal; es cuestion de agregar el nombre de mi sesion y poner el nombre de la sesion siempre antes de session_start():

Código PHP:
Ver original
  1. session_name('nombre'); //Debo poner esta linea a todos los archivos que manejen sesiones ???
  2.     session_start();
  3.     include('c.php');
  4.     if($_SESSION['tipo_usu']=='1' or $_SESSION['tipo_usu']=='2'){
  5.         // Que haga lo que tiene que hacer
  6.        }
  7.    // Si no le pongo un error que dice que no tiene privilegios.
  8.         else {
  9.             header('location:../error.php');
  10.         }
  11. ?>


La segunda es hacer un archivo config.ini de esta forma:

Código:
name = kosys
Y llamarlo con php y de paso encriptarlo con sha1:

Código PHP:
Ver original
  1. $config = parse_ini_file( 'config.ini' );
  2.     session_name( sha1( $config['name'] ) ); //Debo poner esta linea a todos los archivos que manejen sesiones ??
  3.     include('c.php');
  4.     if($_SESSION['tipo_usu']=='1' or $_SESSION['tipo_usu']=='2'){
  5.         // Que haga lo que tiene que hacer
  6.        }
  7.    // Si no le pongo un error que dice que no tiene privilegios.
  8.         else {
  9.             header('location:../error.php');
  10.         }
  11. ?>

Cual forma creen que deba poner en practica, la dos estaria bien ???

PD: la pregunta de la linea comentada es: Debo poner esa linea en todos los archivos que manejen sesiones ??

Gracias a todos
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #7 (permalink)  
Antiguo 02/09/2013, 22:57
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con Sesiones en el mismo "Server"

La opción del config.ini suena bien si centralizas todo el manejo de sesiones en un script/función/class/etc. ya que si debes hacer los cambios archivo por archivo resulta demasiado.

Y lo que está en la linea que comentas se resuelve igual, debes colocar lo mismo en cada script que haga uso de sesiones, pero si tienes todo disperso entonces deberías mejorar esa parte primero.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 02/09/2013, 23:16
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 10 años, 9 meses
Puntos: 46
Respuesta: Problema con Sesiones en el mismo "Server"

Cita:
Iniciado por pateketrueke Ver Mensaje
La opción del config.ini suena bien si centralizas todo el manejo de sesiones en un script/función/class/etc. ya que si debes hacer los cambios archivo por archivo resulta demasiado.

Y lo que está en la linea que comentas se resuelve igual, debes colocar lo mismo en cada script que haga uso de sesiones, pero si tienes todo disperso entonces deberías mejorar esa parte primero.
Ummm odio no entender algo que me aconsejan

Cuando dice si centralizas todo el manejo de sesiones en un script/función/class/etc. se refiere a hacer un archivo (llamemolo asi) .php que asigne el nombre a la sesion y lo guarde en una variable y que pase esa variable a mis archivos antes de session_start() con un include ???? esq las clases en serio aun no las manejo

Y cuando dice: pero si tienes todo disperso entonces deberías mejorar esa parte primero. a que se refiere ?? que no es bueno que haga la programacion estructurada de esa forma ??

Yo hago mi index con un iframe, luego programo cada archivo php con lo que necesito exactamente y lo llamo al iframe y asi me libre de xajax ya que no lo hice funcionar basicamente por eso tengo varios archivos php
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #9 (permalink)  
Antiguo 02/09/2013, 23:20
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con Sesiones en el mismo "Server"

Piensa, ¿cuantas linea de código tendrías que repetir para corregir tu código?

¿No sería más limpio tener dichas lineas en un solo script e incluirlo en vez de repetir todo cada vez?

Código PHP:
Ver original
  1. include 'sesion.php';

sesion.php

Vamos, el principio "divide y vencerás" es básico, me sorprende que no lo veas así.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 02/09/2013, 23:29
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 10 años, 9 meses
Puntos: 46
Respuesta: Problema con Sesiones en el mismo "Server"

Cita:
Iniciado por pateketrueke Ver Mensaje
Piensa, ¿cuantas linea de código tendrías que repetir para corregir tu código?

¿No sería más limpio tener dichas lineas en un solo script e incluirlo en vez de repetir todo cada vez?

Código PHP:
Ver original
  1. include 'sesion.php';

sesion.php

Vamos, el principio "divide y vencerás" es básico, me sorprende que no lo veas así.
Osea que si tenia razon y habia entendido !!! con include meto lo de las sesiones y me libro de muchas cosas !!!

Gracias Maestro !!! y como decimos los Aikidokas y Karatedokas OSS !!!!
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.

Etiquetas: html, mysql, select, sesiones, sql, usuarios, variable
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 02:01.