Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    session_write_close e $_SESSION

    Ciao,
    quando chiudiamo e scriviamo nel server i valori di sessione con la funzione citata nell'oggetto, cosa accade alla variabile $_SESSION ? Viene resettata o continua a tenerci disponibili i valori?
    Farmacia di Jarno - le mie pillole: Cookie [#780810], Dom4Php4 [#1123236], Fade [#1139489], getCssProperty [#1152911]
    Inchinatevi difronte al Prof! Nacchio!

    A me pare che l'uomo vada avanti con la retromarcia

  2. #2
    Ho fatto un test e sembra che i valori rimangano disponibili nella variabile $_SESSION.
    Quindi una volta scritta e chiusa la sessione, a meno che non ci sia bisogno di scriverci qualcosa, non è necessario riaprirla con session_start() bloccando inutilmente l'uso della sessione.

    Confermate?
    Farmacia di Jarno - le mie pillole: Cookie [#780810], Dom4Php4 [#1123236], Fade [#1139489], getCssProperty [#1152911]
    Inchinatevi difronte al Prof! Nacchio!

    A me pare che l'uomo vada avanti con la retromarcia

  3. #3
    Originariamente inviato da Jarno
    Ho fatto un test e sembra che i valori rimangano disponibili nella variabile $_SESSION.
    Quindi una volta scritta e chiusa la sessione, a meno che non ci sia bisogno di scriverci qualcosa, non è necessario riaprirla con session_start() bloccando inutilmente l'uso della sessione.

    Confermate?
    $_SESSION e' visibile (lettura/scrittura) solo dai membri della sessione stessa. Quindi o si e' in sessione oppure non si avra' alcuna visibilita' dei dati di sessione.

    Oltretutto una sessione scade dopo un periodo di inattivita' definito nel php.ini oppure con la chiusura del browser sempre parlando del default. Quindi non e' un posto dove mettere dei dati permanenti come fosse un db.

    Non capisco cosa intendi dire con il bloccare l'uso della sessione. Non blocchi nulla, ogni utente che aprira' una sessione la vedra' solo lui senza inibire nulla agli altri.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Ciao Piero,
    mi è chiaro quanto hai scritto ma la mia domanda è un pochino più evoluta.
    Nell'esecuzione di uno script, appena apri l'uso della sessione con session_start() nessun altro script può accedere a quella sessione fino al termine dello script o all'esecuzione di session_write_close().

    A parte questo, la mia domanda era un'altra: in molti casi è consigliato chiudere l'uso delle variabili di sessione con session_write_close() quando non c'è bisogno di modificarle, ancor prima che l'esecuzione dello script termini, sia perchè abbiamo la sicurezza della scrittura sia perchè potrebbe interferire con altri elementi dell'esecuzione. Ok, ma facendo così, avevo paura di non avere più a disposizione nella ram i valori di $_SESSION, invece sembrano rimanere (ovviamente per la sola lettura dal momento che ho chiuso la sessione).

    Dico bene?
    Farmacia di Jarno - le mie pillole: Cookie [#780810], Dom4Php4 [#1123236], Fade [#1139489], getCssProperty [#1152911]
    Inchinatevi difronte al Prof! Nacchio!

    A me pare che l'uomo vada avanti con la retromarcia

  5. #5
    La sessione e' dedicata ad uno specifico utente ed a nessun altro. Un utente accede ad una pagine di script che richiama il session_start(). Se l'utente possiede un cookie di sessione valido ha l'accesso a quella specifica sessione.

    Se lo script richiama con un include/required un altra pagina di script che contiene pure a sua volta un session_start() riceve la notifica di errore di "sessione gia' aperta". l'array di sessione ($_SESSION) viene scritto in un file oppure in un record di db (sqlite) a seconda di come hai impostato il session.save_handler nel php.ini

    Il comando session_write_close() avviene comunque in modo implicito alla chiusura dello script. L'unico caso di problema di accesso ai file di sessione potrebbe avvenire con l'uso di framset dove i singoli frame dovrebbero aspettare la conclusione della pagina di script per accedere a loro volta ai dati di sessione (in stato di looked dalla pagina in esecuzione). Ma siamo sempre con lo stesso utente e diversa pagina .php

    La pagina che chiude la sessione non puo' piu' riaprirla perche' ha gia' inviato un output al browser quando lesse il cookie di sessione. Quindi l'header per la letture del cookie e' gia' stato inviato e la pagina non puo' piu' accedere alla sessione e modificarne il contenuto.

    Potrai ancora leggere o scrivere l'array $_SESSION in quanto array dello script in RAM ma non potrai piu' scrivere/leggere il file salvato con session_write_close(). Non capisco in ogni caso l'utilita' di voler leggere $_SESSION dopo la chiusura di sessione.

    Questa possibilita' mi pare piu' un buco software che il non considerarlo una prestazione. Se chiudo non dovrei piu' vedere i dati di sessione cosi' come mysql_close() cancella il resource id relativo al buffer del result set e quindi non trovo piu' i record selezionati dalle query.

    A mio parere dovrebbe succedere qualcosa di simile:

    Codice PHP:
    ...
    session_write_close();
    $_SESSION = array();

    .......
    //altro codice 
    Concludendo il fatto di chiudere la sessione prima del completamento dello script puo' essere di qualche utilita' solo in caso di uso di framset. (IMHO)

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    Originariamente inviato da piero.mac
    Potrai ancora leggere o scrivere l'array $_SESSION in quanto array dello script in RAM ma non potrai piu' scrivere/leggere il file salvato con session_write_close().
    Sì, infatti, è quello che ho appena verificato.

    Originariamente inviato da piero.mac
    il fatto di chiudere la sessione prima del completamento dello script puo' essere di qualche utilita' solo in caso di uso di framset.
    ...e più chiamate ajax che partono da una stessa pagina?

    Originariamente inviato da piero.mac
    Non capisco in ogni caso l'utilita' di voler leggere $_SESSION dopo la chiusura di sessione.
    La sessione va chiusa subito dopo la modifica per essere sicuri che i dati siano scritti. Il web è pieno di casi in cui la chiusura "spontanea" ha dato notevoli problemi, e ne ho avuti anche io. Ovviamente dentro la sessione ho dei valori da recuperare ed usare, ma se l'ho appena chiusa è importante per me avere comunque questi valori a disposizione (solo per la lettura), e a quanto pare i valori rimangono in $_SESSION come speravo (anche se come dici tu non è tanto corretto).
    Farmacia di Jarno - le mie pillole: Cookie [#780810], Dom4Php4 [#1123236], Fade [#1139489], getCssProperty [#1152911]
    Inchinatevi difronte al Prof! Nacchio!

    A me pare che l'uomo vada avanti con la retromarcia

  7. #7
    Originariamente inviato da Jarno
    La sessione va chiusa subito dopo la modifica per essere sicuri che i dati siano scritti. Il web è pieno di casi in cui la chiusura "spontanea" ha dato notevoli problemi, e ne ho avuti anche io. Ovviamente dentro la sessione ho dei valori da recuperare ed usare, ma se l'ho appena chiusa è importante per me avere comunque questi valori a disposizione (solo per la lettura), e a quanto pare i valori rimangono in $_SESSION come speravo (anche se come dici tu non è tanto corretto).
    Non lo metto in dubbio. Ma siccome diffido anche di quello che sostengo (diffido != da non credo) penso che il giorno che un qualche mago sviluppatore del php potesse venire in mente che effettivamente questo di avere ancora dei dati disponibili dopo la chiusura potrebbe portare qualche problema oppure che venga segnalato come bug questo comportamento e decidano di eliminare il contenuto dell'array $_SESSION mi troverei con degli script php non piu' funzionanti.

    Piu' chiamate ajax alla stessa pagina in sessione ma di utenti diversi (browser diversi) non hanno sovrapposizioni, da stesso browser con piu' (stesse) pagine aperte e stessa sessione penso possano arrivare risposte random nel senso che la chiamata della pagina1 faccia arrivare la risposta alla pagina2. In pratica penso che per il server siano la stessa cosa queste chiamate fatte dallo stesso browser alla stessa pagina php. Quello che vedrai sul monitor dipendera' anche da come quel dato browser gestisce la sua cache. Ma con ajax sono una schiappa.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    tanx per lo scambio
    Farmacia di Jarno - le mie pillole: Cookie [#780810], Dom4Php4 [#1123236], Fade [#1139489], getCssProperty [#1152911]
    Inchinatevi difronte al Prof! Nacchio!

    A me pare che l'uomo vada avanti con la retromarcia

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.