¿Que tan normal es la perdida de Sesiones?

Iniciado por spysecurityca, 11 Octubre 2014, 07:27 AM

0 Miembros y 1 Visitante están viendo este tema.

spysecurityca

Si pues tengo unas paginas que intercambian variables de sesion entre ellas y cuando en una pagina en especifico le doy al boton que me redirecciona a otro lugar la session se pierde (ando poniendo session_start() en todos los inicios de las paginas).

Hablé con un amigo y me dijo que suele pasar que es maña de las sesiones ya que son muy volatiles.

Que recomiendan en estos casos?

MinusFour

Las sesiones no desaparecen así porque sí. Hay una razón para todo...

JorgeEMX

Depende, quizá sea el tiempo para expirar.

Como sea, qué tipo de redirección estás tratando de hacer?

spysecurityca

Por href de un obj. Html me envía a una página en el mismo directorio.

Lo puedo solucionar solo hago la pregunta para saber el porque de estas cosas.

He visto que dicen en otros foros que aveces no es error de código sino de configuración del archivo PHP con algo respecto a las cookies.

gAb1

A mí actualmente me esta pasando esto y es muy extraño. Recién inicio sesión, le doy a cualquier link del menu de usuario (perfil por ejemplo) y me sale el mensaje diciendo que necesito estar logueado. La sesión se pierde misteriosamente. Pero si vuelvo a iniciar sesión y le doy al mismo link, ya no se pierde...

Solo tengo el session_start en index.php, pero porque nunca cambio de pagina, en mi caso se incluyen las paginas de contenido en index.php. Debería ser lo mismo...

spysecurityca

gAb1 casualmente lo mio es con un login.

Eso se puede resolver pasando las variables de sesión del usuario a una cookie normal de de X duración (no la puedes hacer con la duración predeterminada ya que como estas perdiendo la sesión la cookie con tiempo estándar se pierde cuando se pierde la sesión).

Y le agregas un destroy de cookie al botón de cerrar sesión de tu página.

Obviamente esa es una forma de corregir el error.

Pero yo lo que quiero es seguir seguir con la variable de sesión sin pasarla a una de cookie.

engel lex

Cita de: spysecurityca en 12 Octubre 2014, 02:13 AM
Pero yo lo que quiero es seguir seguir con la variable de sesión sin pasarla a una de cookie.

necesitas que el navegador guarde la variable de sesion en algún lado o lo haces en una cookie que se manda como cabecera, o lo haces en un datastorage (o alguna de esas cosas de html5) y al cargarse la pagina esperas que el jscript mande los datos y respondes en base a eso (esto puede ser lento)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

spysecurityca

Epale chamo lo había resuelto con variable por cabecera ósea mi problema no es resolver sino de funcionamiento si no se puede con la variable session por defecto pues resuelvo con los métodos que tengo a la mano  :D

gAb1

No estoy muy seguro de eso, pero asi es como crea la sesión mi funcion login:

Código (php) [Seleccionar]
if ($db_password == $password) {
// Password is correct!
// Get the user-agent string of the user.
$user_browser = $_SERVER['HTTP_USER_AGENT'];
// XSS protection as we might print this value
$user_id = preg_replace("/[^0-9]+/", "", $user_id);
$_SESSION['user_id'] = $user_id;
// XSS protection as we might print this value
$username = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $username);
$_SESSION['username'] = $username;
// XSS protection as we might print this value
$acc_type = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $acc_type);
$_SESSION['acc_type'] = $acc_type;
$_SESSION['pwd_changed'] = $pwd_changed;
$_SESSION['login_string'] = hash('sha512',
  $password . $user_browser);
// Login successful.
$last_ip = get_ip_address();
$mysqli->query("UPDATE members SET last_ip='{$last_ip}' WHERE id='{$user_id}'");
return true;
}


Asi es como empiezo las sesiones:

Código (php) [Seleccionar]
function sec_session_start() {
    $session_name = 'sec_session_id';   // Set a custom session name
    $secure = SECURE;
    // This stops javascript being able to access the session id.
    $httponly = true;
    // Forces sessions to only use cookies.
    if (ini_set('session.use_only_cookies', 1) === FALSE) {
        header("Location: /error?err=No se pudo iniciar una sesión segura (ini_set)");
        exit();
    }
    // Gets current cookies params.
    $cookieParams = session_get_cookie_params();
    session_set_cookie_params($cookieParams["lifetime"],
        $cookieParams["path"],
        $cookieParams["domain"],
        $secure,
        $httponly);
    // Sets the session name to the one set above.
    session_name($session_name);
    session_start();            // Start the PHP session
    session_regenerate_id();    // regenerated the session, delete the old one.
}


Y este es el logout.php

Código (php) [Seleccionar]
// Unset all session values
$_SESSION = array();

// get session parameters
$params = session_get_cookie_params();

// Delete the actual cookie.
setcookie(session_name(),
'', time() - 42000,
$params["path"],
$params["domain"],
$params["secure"],
$params["httponly"]);

// Destroy session
session_destroy();
header('Location: /home');


Creo que el problema esta en la función sec_session_start() .... Pero no estoy seguro, si alguien pudiese confirmarmelo :)

Gracias!

spysecurityca

Bueno mi gente he resuelto el problema como lo tenia pensado y como me dijeron por aquí, pasando la variable que conservo en la session por header a la otra página o por cookie.

Si desean pueden cerrar el tema o pueden dejarlo abierto para seguir ayudando al pana gAb1

Saludos.