Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    Non vorrei che ajax prolunghi la sessione (quesito difficile!)

    Immaginate una maschera di modifica di un record che, per poter riconoscere quali campi del record sono stati modificati dall'utente (così da salvare solo quelli effettivamente modificati, in modo che eventuali altre modifiche effettuate da altri utenti su altri campi non vengano azzerate dal salvataggio di una maschera in cui quei campi non sono stati modificati) salva in sessione se stessa, così da poter sempre sapere quali erano i valori letti dal db dei vari campi al momento della creazione della maschera stessa.

    Naturalmente, tutto ciò significa che esiste una sessione di login attiva con una certa durata, ma anche che è necessario che queste maschere che vengono salvate nella sessione scadano dopo un certo lasso di tempo, che deve essere minore della durata della sessione stessa, visto che in una sessione verranno usate molte maschere diverse, che potrebbero fare crescere eccessivamente la dimensione dei dati salvati in sessione.

    Quindi, all'interno della sessione, ho creato un altro meccanismo di timeout che fa scadere le maschere salvate dopo un certo tempo di inattività, appunto inferiore alla durata della sessione stessa.

    Questo però implica che se, invece, l'utente rimane parecchio tempo su una maschera per inserirne i contenuti, potrebbe avere dei problemi in fase di salvataggio perché, nonostante la sua sessione sia ancora attiva, la maschera potrebbe essere invece scaduta (cosa che, dal punto di vista della prevenzione dello spam, non è poi malvagia, ma potrebbe essere assai fastidiosa per l'utente).

    Poiché in fase di login è stata verificata in modo certo la presenza di javascript, utilizzo un piccolo ajax che carica ogni tot secondi, naturalmente finché l'utente tiene aperta la maschera nel browser, un apposito script che rinfresca la maschera salvata in sessione.

    E voi direte: e tutto questo che problema ha?

    Il problema, non grave ma che mi infastidisce, è che , naturalmente, lo script di refresh che viene chiamato dall'ajax DEVE caricare la sessione, visto che deve manipolare le maschere che vi sono salvate dentro, e quindi... la prolunga!

    Quello che vorrei ottenerne è di poter caricare la sessione SENZA prolungarne automaticamente la durata, ovvero vorrei poter decidere QUALI url quando caricate prolungano la sessione e quali no.

    Pensate ad esempio anche ad una parte di un sito web contenente dei banner a rotazione, ricaricati tramite ajax: anch'essi avrebbero l'effetto collaterale di rinfrescare la sessione, impedendo di fatto che avvenga il logout automatico per scadenza della sessione stessa...

    Che ne pensate? Grazie a tutti gli esperti che vorranno dire la loro!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  2. #2
    Se ho ben interpretato il tuo quesito, mi verrebbe da suggerirti di agire sui cookie

    http://us.php.net/manual/it/session....ookie-lifetime

    ciao,stefano

  3. #3
    Quindi, se ho ben capito il tuo consiglio è che dovrei occuparmi io di gestire la durata del cookie di sessione, ma come fare per fare si che io possa caricare la sessione senza prolungarla? Devo leggermi il cookie di sessione e capire quanta durata gli rimaneva prima di aprire davvero la sessione, giusto?

    Ma la session_get_cookie_params si può chiamare prima di session_start()?

    Se fosse così dovrei fare
    session_get_cookie_params
    session_set_cookie_params con i parametri riguardanti la durata abbreviata
    session_start

    ...
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  4. #4

  5. #5
    Grazie della segnalazione, me lo leggo tutto e poi vi posto come ho risolto!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  6. #6
    Allora, sembra che con i soli meccanismi di php classico non sia possibile, perché per ottenere ciò che io volevo è necessario poter leggere la expiry date del cookie di sessione, cosa che è IMPOSSIBILE fare: il browser non manda MAI la expiry date dei cookie al server...

    Quindi, bisognerebbe che in fase di creazione del cookie di sessione io mandassi anche un altro cookie in cui ho segnato l'orario di creazione di questa sessione, e che poi lo vada a recuperare e lo usi per decidere come e se prolungare il vero cookie di sessione; la cosa si fa assai complessa, e penso che per ora soprassiederò!

    Grazie comunque della risposta!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  7. #7
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Secondo me l'unico modo è inserire un valore all'interno della sessione in cui specifichi la scadenza, dopodiché ovviamente ogni pagina ricaricata per intero aggiornerà quel valore, mentre le chiamate da ajax lo lasceranno invariato.

  8. #8
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da StefanoC
    Questo è fatto bene:

    http://www.timendum.net/blog/201/pro...me-e-lifetime/
    Come no.
    Una ciofeca ciclopica

  9. #9
    Originariamente inviato da luca200
    Secondo me l'unico modo è inserire un valore all'interno della sessione in cui specifichi la scadenza, dopodiché ovviamente ogni pagina ricaricata per intero aggiornerà quel valore, mentre le chiamate da ajax lo lasceranno invariato.
    Mi spiace, ma questo è proprio... SBAGLIATO!

    Se inserissi un valore dentro alla sessione, per leggerlo dovrei fare session_start, e questo... rinfrescherebbe la sessione, che è proprio quello che io non volevo...

    L'unico modo di farlo è avere un coookie separato che contenga la data di creazione (o di scadenza, è lo stesso) del cookie di sessione, così, PRIMA di fare session_start posso leggerlo e fare session_set_cookie_params per abbreviare la sessione...

    Solo che è una gran piva! Prima o poi lo farò, ma ora non ho abbastanza tempo da dedicarci; se ci fosse stato un bel parametro da passare a session_start per dirgli di non allungare la sessione, sarebbe stato meraviglioso!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  10. #10
    Originariamente inviato da luca200
    Come no.
    Una ciofeca ciclopica
    "Questo mi sembrava fatto bene", almeno a me, ma così non è...

    cos'ha che non va ?
    è un post superficiale? è inutile ? o è proprio scazzato di brutto ??



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 © 2024 vBulletin Solutions, Inc. All rights reserved.