Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Keep session alive

Îåêßíçóå áðü ôï ìÝëïò AngelsGR. Τελευταία δημοσίευση από το μέλος AngelsGR στις 21-10-2008, 15:13. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  20-10-2008, 10:33 45596

    Keep session alive

    Θέλω να κρατάω κάποιες τιμές στο session της σελίδας μου αλλά μετά από κάποιο χρονικό διάστημα το session χάνει τις τιμές του. Πως μπορώ να κρατάω το session alive, είτε μέχρι να κλείσει ο browser είτε μέχρι να φύγει από την σελίδα μου??

  •  20-10-2008, 11:12 45599 σε απάντηση της 45596

    Απ: Keep session alive

    Το session κρατάει για 20 λεπτά και μπορείς να αλλάξεις τη διάρκεια του μέχρι 1 χρόνο. Θέλεις όμως πραγματικά να κρατήσεις ένα session ανοικτό για παραπάνω από 20 λεπτά? Κι αν ο χρήστης σηκωθεί και φύγει? Αν χάσει τη σύνδεση του? Θα παραμείνει ανοικτό το session?

    Αν θέλεις πάντως να έχεις μικρό timeout αλλά να διατηρείται το session όσο ο browser είναι ανοικτός θα πρέπει κάπως να κάνεις κλήσεις από το browser στο server. Αυτό μπορεί να γίνει με διάφορους τρόπους. Μπορείς σε ένα κρυφό IFrame να δείχνεις μία dummy σελίδα η οποία όμως έχει ορισμένο ένα μικρό refresh timeout. Μπορείς να φτιάξεις ένα AJAX timer control το οποίο θα κάνει το ίδιο για ένα update panel. Μπορείς ακόμα και να καλείς με Javascript ένα web service στο server Stick out tongue


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  20-10-2008, 13:51 45600 σε απάντηση της 45599

    Απ: Keep session alive

    Έχω φτιάξει μια σελίδα στην οποία ο χρήστης μπαίνει μέσα και γράφει το δικό του κείμενο. Κάποιοι κάνουν περισσότερο απο 20 λεπτά να γράψουν το κείμενο τους και επειδή έχει πέσει το session χάνω το User ID και αποτυγχάνει μετά το sql post που γίνεται. Μήπως κακός κρατάω το User ID στο session? Αν όχι, τότε ο timer control τι είδους κλήση θα πρέπει να κάνει στον server? Θα πρέπει να έχω μια dummy ρουτίνα στον server που απλά θα την καλώ??

  •  21-10-2008, 02:31 45629 σε απάντηση της 45600

    Απ: Keep session alive

    Να η δική μου low overhead λύση:

    1. BLOCKED SCRIPT
    1
    2
    3
    4
    5
    6
    7
    window.setTimeout('retainSession()', 240 * 1000);

    function retainSession() {
      var img = new Image(1, 1);
      img.src = '/Components/SessionRetainer.ashx';
      window.setTimeout('retainSession()', 240 * 1000);
    }

    2. Το SessionRetainer είναι ένας απλούστατος IAsyncHttpHandler ο οποίος υλοποιεί επίσης και το IReadOnlySessionState, και δεν επιστρέφει τίποτα, αλλά θέτει το Response.Cache σε non-cacheable (αλλιώς o browser δεν θα καλέσει τον handler πάνω από μία φορά).

    3. Το javascript καλεί τον handler κάθε 4 λεπτά, ενώ το session expiration από το web.config είναι ορισμένο στα 5 λεπτά.

    Μην αφήνετε τα media να σας "ταΐζουν"!
  •  21-10-2008, 10:15 45637 σε απάντηση της 45600

    Απ: Keep session alive

    Οτιδήποτε κλήση και να κάνει αρκεί. Αυτό που έχει σημασία είναι να δεχτεί ο server μία κλήση από το browser. Ο Mitsaras σου έδωσε ένα τρόπο αν και νομίζω ότι αν απλά καλείς μία οποιαδήποτε σελίδα αρκεί. Για εικόνα δεν είμαι σίγουρος γιατί μπορεί να παρεμβαίνει και η cache του browser.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  21-10-2008, 10:49 45640 σε απάντηση της 45637

    Απ: Keep session alive

    Ανέφερα τον παραπάνω τρόπο γιατί θεωρώ ότι μάλλον είναι πιο lightweight από την χρήση AJAX/Web service, και δεν χρειάζεται να χρησιμοποιήσεις έξτρα html tags, ειδικά το IFRAME που θεωρείται πλέον deprecated σε XHTML. Φυσικά όλα αυτά έχουν σημασία σε sites με πολύ μεγάλη κίνηση.

    Τώρα, σε ό,τι αφορά την εικόνα, χρησιμοποιώντας
    Response.Cache.SetExpires(DateTime.Now.AddYears(-10)) και
    Response.Cache.SetNoStore

    το πρόβλημα του caching από τον browser παύει να υφίσταται.

    Μην αφήνετε τα media να σας "ταΐζουν"!
  •  21-10-2008, 15:13 45650 σε απάντηση της 45640

    Απ: Keep session alive

    παιδια οι απαντησεις σας μου ηταν πολυτιμες, σας ευχαριστω πολυ. Τελικα εκανα το εξης. Εφτιαξα μια aspx σελιδαμε το ονομα KeepSessionAlive.aspx  η οποια το μονο που εχει ειναι ο παρακατω κωδικας:

      protected void Page_Load(object sender, EventArgs e) {
        Response.AddHeader("Refresh", Convert.ToString((Session.Timeout*60)-100));
      }

    και στην masterpage σελιδα μου εβαλα τον παρακατω κωδικα:

    <iframe id="Defib" height="0" width="0" src="KeepSessionAlive.aspx" frameborder="0" runat="server" />

    με αυτον τον τροπο μπορω και κραταω το session alive!!

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems