Foros del Web » Programando para Internet » PHP »

Problema con sesiones personalizadas en manternerlas

Estas en el tema de Problema con sesiones personalizadas en manternerlas en el foro de PHP en Foros del Web. Buenas noches compañeros: Estoy intentanto profundizar en el tema de sesiones, y llevo dia y medio atascado en lo mismo y recurro a ustedes con ...
  #1 (permalink)  
Antiguo 20/06/2010, 14:57
 
Fecha de Ingreso: octubre-2007
Mensajes: 118
Antigüedad: 17 años
Puntos: 11
Problema con sesiones personalizadas en manternerlas

Buenas noches compañeros:
Estoy intentanto profundizar en el tema de sesiones, y llevo dia y medio atascado en lo mismo y recurro a ustedes con el fin que pueda avanzar , porque nada mas acabo de empezar.

Estoy haciendo un gestor de noticias, el index saldría el formulario de login y ya acceden al menu con las diferentes opciones.

el index.php actual para pruebas es este:
Código PHP:
<?php 
include("../configuration.php");
include(
"languages/spanish.php");
require_once(
"classes/db.class.php");
require_once(
"classes/session.class.php");
?>
<head>
<link rel="stylesheet" type="text/css" href="css/admin.css">
</head>
<?php
$option
=(isset($_REQUEST['option'])) ? $_REQUEST['option'] : NULL
switch(
$option){
    case 
'menu':    require_once('modules/mod_menu/menu.php');
                    break;
    default:        require_once(
'modules/mod_login/login.php');
                    break;
}
?>
login.php
Código PHP:
<?php
global $pathway,$sess;
$user=(isset($_POST['username']) && $_POST['username']!='') ? $_POST['username'] : false;
$pass=(isset($_POST['passwd']) && $_POST['passwd']!='') ? $_POST['passwd'] : false;
if(
$user!=false || $pass!=false){
    global 
$host,$username,$passwd,$selected_db;
    
$db=new database;
    
$link=$db->connect($host,$username,$passwd,$selected_db);
    
$query=$db->select("SELECT username,passwd FROM users WHERE username='".$_POST['username']."' AND passwd='".$_POST['passwd']."'");
    if(
$db->num_rows($query)!=0){
        
$sess=new session($_POST['username']);
        
date_default_timezone_set('Europe/Madrid');  
        
$registerDate=$db->select("UPDATE users set lastVisitDate='".date('Y-m-j H:i:s')."' where username='".$_POST['username']."' ");
        
$session_db=$db->select("    
                                INSERT INTO session 
                                    (username, lastVisitDate, session_id, guest) 
                                VALUES 
                                    ('"
.$_POST['username']."', '".date('Y-m-j H:i:s')."', '".session_id()."', 'false') 
                                "
);
        
header('Location: index.php?option=menu');
}
}else{
?>
<div id="wrapper">
<div class="title">.... SIGUE EL FORMULARIO

menu.php
Código PHP:
<?php 
global $pathway;
session_start();
echo 
session_id();
?>

La db.class no hara falta ponerla puesto que no realizo nada con ella que no se pueda entender.

session.class.php ( en construccion)

Código PHP:
<?php 
class session{
    private 
$sess_name// contendrá el nombre de la sessión
    
public $reg=array(); 
    public 
$redirect='index.php';
    public 
$pending=2;
    
     function 
__construct($session_name){
        
$this->sess_name=$session_name;
        
session_name($this->sess_name);
        
session::start_session();
    } 

    public function 
start_session(){ 
        return 
session_start(); 
    } 

    public function 
get_session_id(){
        return 
session_id();
    }
    
    public function 
set_session_value($name,$value){
        
$_SESSION[$name]=$value;    
    }
    
    public function 
unset_default_session_value($name){
        unset(
$_SESSION[$name]);    
    }
        
// FINAL DE CLASE
?>


Despues de todo esto que ya asusta , el problema que tengo es simple y no lo entiendo:

La idea es que cuando llegues a menu.php ... si tu nombre de usuario es : "pepito", donde esta el
Código PHP:
echo session_id 
me mostraria el de
Código PHP:
$_SESSION['pepito'
, pero no! al llegar a menu y con el
Código PHP:
sesion_start() 
, me crea una sesion por defecto y me muestra ese session_id.Ahora si miro las cookies , si sale mi nombre de cookie pepito con su sid, justo antes de esta creada, es decir que creada esta.

Resumen: Como puedo mantener una sesión personalizada con
Código PHP:
sesion_name() 
.

Si quito el session_start(), obviamente no muestra
  #2 (permalink)  
Antiguo 20/06/2010, 16:48
Avatar de wiwi74  
Fecha de Ingreso: marzo-2008
Mensajes: 515
Antigüedad: 16 años, 8 meses
Puntos: 10
Respuesta: Problema con sesiones personalizadas en manternerlas

Te comento algunas cosas que vi (aunque no sean la solucion)

El uso de global me parece innecesario

Código PHP:

global $host,$username,$passwd,$selected_db


Y mas aca:
Código PHP:

<?php  
global $pathway
//antes de session_start()
session_start(); 
echo 
session_id(); 
?>

En todo caso global se usaria asi:

Código PHP:

$a 
"Hola";
function 
mostrar(){
//si comentas esta linea $a no se vera
global $a;
echo 
"Mostrando: ".$a;
}
mostrar(); 


Cita:
session_name() devuelve el nombre de la sesión actual. Si se especifica un nombre , el nombre de de la sesión actual se cambia a este valor.

El nombre de la sesión hace referencia al session id utilizado en las cookies y en las URLs. Debería contener únicamente caracteres alfanuméricos; también debería ser corto y descriptivo (p.ej. para usuarios con los avisos de las cookies activados). El nombre de la sesión se restaura al valor guardado por defecto en session.name al comenzar la petición. Así, pues, es necesario llamar a session_name() en cada petición (y antes de llamar a session_start() o a session_register()).
...Nada mas por ahora

Última edición por wiwi74; 20/06/2010 a las 17:07
  #3 (permalink)  
Antiguo 21/06/2010, 04:28
 
Fecha de Ingreso: octubre-2007
Mensajes: 118
Antigüedad: 17 años
Puntos: 11
Respuesta: Problema con sesiones personalizadas en manternerlas

Muchas gracias wiwi74!

No se si mi comprensón lectora es paupérrima o estaba ya de los nervios atascado jeje.
Yo de php.net, entendía que para que tu sesión cogiera ese nombre habia que llamarla antes de
Código PHP:
session_start 
, pero el "en cada petición" me lo comí con patatas como 30 veces que me lo habría leido.
Efectivamente lo he probado y funciona correctamente, lo que me plantea cambiar lo que estaba haciendo porque no quiero depender de la DB por el momento para mantenerlas.


Con respecto a lo que me mencionas de las variables globales, es porque en un principio estaban dentro de funciones, pero fui quitando cosas para facilitarme el ver problemas y las variables las dejé sin querer .

Etiquetas: sesiones
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 22:37.