PDA

Ver la Versión Completa : Sesiones y variablaes


Fr@n
25-05-2003, 13:03:28
Wnas... soy bastante novato, y con los libros no me aclaro... alguien me puede ayudar!!?? Como se crea una sesión y se mantiene en todas mis páginas??? y como creo una variable en la primera página y mantengo su contenido hasta la última ??? ( hay 4 páginas... tampoco esq sean muchas... ):D

__hector
25-05-2003, 23:40:05
Hola!

Tienes que, en cada pagina que vas a utilizar las variables de sesion, inicializarlas con:

session_start();

Luego, asignas los valores a las variables que seran guardadas en la sesion:

$variable_id = "talocualvalor";

Y, registras la variable:

session_register("variable_id");

Luego, en cualquier otra pagina, puedes acceder al valor de la variable, iniciando la sesion:

session_start();
echo $variable_id;

Fr@n
26-05-2003, 01:08:10
Gracias por la respuesta, ha sido la mas aclaradora!! :p :p :D :D

Fr@n
26-05-2003, 04:12:19
El session_start(); se tiene q poner en cada página ??? osea como ya he dixo antes tengo unas 6 páginas aproximadamente... con variables cada una de ellas... todas las tengo q empezar con
<?
session_start();
...
...
?>

??????????????

Gracias de toas maneras...

kayetano
26-05-2003, 12:32:18
Hola

Si lo unico que quieres es mantener el valor de una variable no te lies con sesiones y utiliza una "cookie" mira la funcion "setcookie"

__cadetill
26-05-2003, 13:43:05
Hola kayetano

Yo no es que sea un guru del PHP, todo lo cantrario, tambien empiezo ahora, pero creo que las sesiones le funcionaran seguro, en cambio, las cookies, si el cliente las tiene desactivadas, no va a funcionarle. Es cierto lo que digo?

__hector
26-05-2003, 16:05:13
En cada pagina que vayas a utilizar los valores guardados en las variables de sesion, si, tienes que poner el session_start()

kayetano
26-05-2003, 17:17:12
hola cadetill

Si no recuerdo mal cuando se crea una sesion lo primero que hace php es crear una cookie, en caso de que no pueda arrastra el ID de la sesion por metodo GET ( si no recuerdo mal :-) )

Por lo tanto hay que tener en cuenta los pro y los contra.

Con una cookie es mas rapido y menos lioso, una vez creada la cookie, ya no hay que hacer nada mas, podemos acceder a ella con el nombre de la variable o a traves de $HTTP_COOKIE_VARS, y la mayoria de usuarios tienen activa la opcion de cookies.

Por otro lado una sesion hay que iniciarla, con lo que crea una cookie y mantenerla ( session_start() en cada pagina ).

Esto, claro, hablando de una unica variable, cuando se trata de estructuras yo me decanto por la sesion.

La verda es que yo uso las dos modalidades y funcionan perfectamente, ya que nadie se a quejado todavia :-).

Fr@n
26-05-2003, 19:51:01
Puedes explicarme como puedo hacerlo por el método de cookies ???? gracias... pon un ejemplo plis!!

__hector
26-05-2003, 21:41:36
Creo que el manejo de los estados de sesion es independiente de la implementacion del lenguaje de scripting, ya sea PHP o ASP, y en ambos casos para utilizar variables de sesion es necesario que el usuario tenga habilitadas las cookies, por la forma de funcionamiento de la tecnologia de sesion.

Esta lo que hace es copiar un valor en la maquina del cliente (con cookies), lo que llamamos ID de session (SessionID), y con ese valor puede identificar cada peticion en el servidor, y guardar valores correspondientes a X peticion entre las paginas del mismo dominio.

No se si php se valga de algun algoritmo especial, como ocultar ese valor en algun campo oculto añadido a las paginas o algo asi. En ASP.NET solucionaron ese problema de una forma elegante, y es pasando el id de la sesion siempre en el querystring, de tal forma que cada peticion queda de la forma:

http://www.dominio.com/valoresqueidentificanlasesion/directorio/pagina.aspx

siendo "valoresqueidentificanlasesion" una cadena identificadora unica para el visitante. Es muy poco elegante (visualmente) pero terrificamente poderosa, y con una sencillez en cuanto al desarrollo envidable (cero preocupacion por habilitar cookies ni nada de eso)

Emilio
27-05-2003, 00:15:37
Hola.

El tema de las sessiones y las cookies son para cosas totalmente distintas y nada tienen que ver unas con otras, intento explicarme.

La session como su nombre indica, es para mantener "la conexión con el usuario", por ejemplo para mantener un carrito de la compra con los productos seleccionados, sus importes y la información que precisemos mantener en esa session y que PHP se encarga de guardar en un fichero en el servidor.

Por el contrario, las cookies se guardan como todos sabemos en el cliente, y generalmente se utilizan para que al establecer un primer contacto con el servidor, podamos leer de ellas de que usuario se trata, con ello podemos establecer sus preferencias o simplemente no obligar al usuario a tener que identificarse cada vez que acude a nuestra aplicación.

Ambas cosas son muy útiles, pero cada cosa está pensada para una utilidad distinta.

El cómo usarlas ya está explicado por ahí y no creo necesario repetirlo.

Saludos
Emilio.

Fr@n
27-05-2003, 01:28:10
Segun he ido leyendo el caso que debería utilizar es el de las Sesiones..., Tengo tres paginas, de las cuales index.php es la principal, login.php es un validador, y menu.php, que es donde finaliza si se ha logueado correctamente... el problema q tengo esq me decíis que tengo que poner el session_start(); en cada pagina... si hago esto la variable $var, pierde su valor de la pagina index.php a login.php, puesto q las dos tienen el session_start()... si elimino el session_start(); de la segunda, la variable pasa, pero en la tercera pagina ( menu.php ), la variable pierde su contenido...

Y este es el problema que llevo investigando desde hace ya un tiempo... No lo entiendo, para contrastar opiniones he dedicado tiempo en viajar por varios foros, y en muchos me dicen q el session_start(); solo se debe poner en la 1ª pagina... pero como ya he dicho antes, a la tercera pagina no le llega el contenido de la variable... Estoy confundido... :confused: :confused: :confused:

kayetano
27-05-2003, 11:07:19
Hola

X Emilio
Siento llevarte la contraria Emilio pero las cookies sirven para mucho mas que eso que tu cuentas. En una cookie se puede guardar un valor en una pagina y recuperarlo en cualquier otra durante el tiempo que este activo el navegador o durante mas tiempo. Y vuelvo a repetir que es un metodo valido cuando se trata de una simple variable y con una caducidad corta.

Con esto no quiero decir que sea mejor que una sesion, si no que es una alternativa en unos casos muy puntuales.

Queda claro que una sesion no es una cookie y que una sesion sirve para mucho mas que una simple cookie, como el ejemplo del corrito.

Yo suelo utilizar las cookies en las webs que llevan varios idiomas, defino el idioma que desea el usuario y lo mantengo tanto timpo como quiera en la cookie y me sirve tanto en la ejecucion actual de la pagina como en posteriores.

X Fran
Una vez que creas una sesion con no es necesario que pongas al principio de cada pagina esa instruccion, solo debes ponerla en las paginas en las que quieras usar las variables de sesion, me explico:

Pongamos el caso de que tenemos tres paginas, en la primera creamos una sesion y guardamos unos valores, estos valores son necesarios en la tercera pagina pero no en la segunda, por lo tanto solo tendras que poner "session_start()" en la primera y en la tercera, pero no es necesario en la segunda.

Por lo tanto y resumiendo una vez creada una sesion, esta no se destruye hasta que no cierres el navegador por lo que no es necesario que pongas en todas las paginas el famoso "session_start", simplemente tienes que ponerlo cuando quieras acceder a las variables de sesion. Y muy importante, hay que ponerlo antes de mandar cualquier otra cabecera.

__hector
27-05-2003, 16:14:03
Aqui vuelvo...

Posteado originalmente por hector
En cada pagina que vayas a utilizar los valores guardados en las variables de sesion, si, tienes que poner el session_start()

Hice enfasis en un inicio en que el session_start() debe incluirse obligatoriamente "en cada pagina que vayas a utilizar los valores guardados en las variables de sesion". Es logico que no tienes que modificar todas las paginas del sitio, pero SI en las que emplees dichos valores, pq esa instruccion sirve para inicializar los datos de una sesion.

Ahora bien, si estas probando php sobre IIS es muy probable que no te funcione. Por que?, pues ni yo mismo lo se, y tuve una vez ese problema: los datos de la sesion no se guardaban correctamente. Creo que habia que modificar algo en el archivo php.ini, pero como siempre que lo subia a produccion (sobre linux/apache) funcionaba sin problemas, pues no segui investigando.

Ahora, con respecto al punto debatido con Emilio y kayetano, me sirvo hacer esta cita textual extraída del manual de php (traducido al español):


Hay dos formas de propagar un "session id":

Cookies
Parámetro en la URL

El módulo de sesiones admite ambas formas. Las Cookies son la mejor opción, pero como no son fiables (los clientes no están obligados a aceptarlas), no podemos confiar en ellas. El segundo método incrusta el "session id" directamente en las URLs.

PHP es capaz de hacerlo de forma transparente al usuario cuando se compila con --enable-trans-sid. Si activa esta opción, las URIs relativas serán modificadas de forma que contengan el session id automáticamente. Alternativamente, puede usar la constante SID que está definida, si el cliente no envía la cookie adecuada. El SID puede tener la forma de nombre_de_sesion=session_id o ser una cadena vacía.


De esto se entiende que la sesion siempre utilizara al menos una cookie, para guardar en el cliente el ID de la sesion, y poder asociar valores de servidor -> valores hacia el cliente.

La otra alternativa vendria como una solucion mas o menos parecida a la que se implementa en ASP.NET, que es utilizar un identificador de sesion en la URL. Cada uno aborda este punto de forma diferente, y en php vendria de la forma:

http://www.dominio.com/pagina.php?PHPSESSIONID=valoresqueidentificanlasesion

kayetano
27-05-2003, 17:02:36
Hola a todos

Hace tiempo que no veia in hilo de PHP tan concurrido y tan animado :).

Quiero puntualizar que el arrastrar el id de la sesion en la url es algo peligroso.

En la empresa en la que trabajo, entre otras cosas, damos el servicio de "posicionamiento en buscadores", o como se llame, y una de las cosas importantes que hay que tener en cuenta es que las URL's cuanto mas limpias mejor y si se mete, como ya nos ha pasado alguna vez, un id de sesion en la url y el motor de busqueda ( ej. google ) coge esta direccion ¡YA LA HAS CAGADO!

Simplemente queria dar a conocer este punto, que no siempre se tiene en cuenta y normal mente es muy importante.

Emilio
27-05-2003, 22:18:10
Hola de nuevo.

Es cierto que da gusto ver que se va moviendo el foro de PHP, aunque sea para llevarme la contraria :)

Vamos al grano. Todas las páginas que hago para la aplicación de la empresa empiezan de la siguiente forma....


<?
session_start();
session_register("aguan");
session_register("apeich");
session_register("agromenaguer");
include("header.php");
.
.
?>


Y jamás pierdo un valor por mucho que salte de página en página. Por mi parte zanjado el tema de las sesiones.

Kayetano, dices que sientes llevarme la contraria. Lo cierto es que no veo que discrepemos demasiado, comentas, que las cookies sirven para mucho más, de lo que yo digo que se puede hacer con ellas. Yo digo, y mantengo, que las cookies son ficherillos en el cliente, en los que podemos guardar ciertos valores, que tengamos más o menos pericia para hacer más o menos cosas con ellas, ya no dependen de ellas,´sino de nosotros.

Con las cookies podemos hacer cosas que no podemos hacer con las sesiones, por ejemplo guardar como por ahí comentas, el idioma, la resolución de pantalla, el navegador, fecha de última visita, nombre del usuario etc.... así podemos cargar sus preferencias en SESSION y mantenerla durante su estancia en el servidor.

Ahora bien, dices....


En una cookie se puede guardar un valor en una pagina y recuperarlo en cualquier otra durante el tiempo que este activo el navegador o durante mas tiempo.


Totalmente de acuerdo en lo que dices, pero.. jeje tenía que haber un pero :)

Pero es mucho mejor usar las sesiones para cualquier cosa que no sea lo citado anteriormente, las cookies únicamente deberían usarse al cargar la primera página, es decir, al iniciar la sesión.

Seguro que le sacas punta y me parece perfecto así le damos vidilla al foro de PHP.

Saludos
Emilio.

kayetano
28-05-2003, 10:59:03
Hola

Creo que el tema ya se ha explicado demasiado, y sera mejor dejar de profundizar en el puesto que es muy posible que llegemos a confundir a amigo FRAN que fue el iniciador el hilo.

Espero que haya sido de utilidad este hilo para todos. Y que cada uno saque sus propias conclusiones.

La programacion no es una ciencia es un arte, y como tal cada uno lo interpreta como quiere.

PD. "session_register" lleva implicita la llamada a session_start ;)