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

 

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

Ενημέρωση table μετά από κλείσιμο του IE

Îåêßíçóå áðü ôï ìÝëïò deykas. Τελευταία δημοσίευση από το μέλος deykas στις 19-05-2006, 22:18. Υπάρχουν 11 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  17-05-2006, 22:38 12886

    Ενημέρωση table μετά από κλείσιμο του IE

    Επανέρχομαι στο forum για το θέμα ενημέρωσης SQL server table μετά από κλείσιμο του Internet Explorer:

    Δοκίμασα με το session_end αλλά δεν μπορώ να πιάσω την περίπτωση.

    Γνωρίζει κανείς πως μπορώ να το κάνω;

    Ευχαριστώ εκ των προτέρων...

  •  18-05-2006, 09:26 12893 σε απάντηση της 12886

    Απ: Ενημέρωση table μετά από κλείσιμο του IE

    Κανονικά με το Session_End θα έπρεπε να κάνεις τη δουλειά σου. Να σημειώσω ότι το Session_End ενδέχεται να μην καλείται αμέσως μόλις κλείσει ο Explorer αλλά μόλις περάσει ο χρόνος στον οποίο κλείνει ένα Session (συνήθως ένα 20λεπτο).

    Αν έχεις δοκιμάσει να περιμένεις τόσο για να δεις αν θα κληθεί το event τότε δεν μου έρχεται αυτή τη στιγμή κάτι άλλο που μπορείς να κάνεις και να μην είναι τρελή χακιά...
    Στερνή μου γνώση να σε είχα πρώτα...
  •  18-05-2006, 09:37 12897 σε απάντηση της 12893

    Απ: Ενημέρωση table μετά από κλείσιμο του IE

    Αν θέλεις για τις δοκιμές να κάνει expire το session νωρίτερα, μπορείς να το αλλάξεις από το Web.config σου:

    <sessionState
    mode="InProc"
    stateConnectionString="tcpip=127.0.0.1:42424"
    sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
    cookieless="false"
    timeout="20"
    />

     


    Νατάσα Μανουσοπούλου
  •  18-05-2006, 09:39 12898 σε απάντηση της 12886

    Απ: Ενημέρωση table μετά από κλείσιμο του IE

    Για κοίτα και εδώ χωρίς να μαι σίγουρος ότι σου κάνει. Κάτι παρόμοιο έχει φτιάξει αυτός.
  •  18-05-2006, 09:43 12899 σε απάντηση της 12893

    Απ: Ενημέρωση table μετά από κλείσιμο του IE

    Το Session_End σίγουρα δεν θα σηκωθεί όταν κλείσει ο IE, ο server δεν έχει την παραμικρή ιδέα αν ο IE είναι κλειστός ή ανοικτός. Το event θα σηκωθεί μόνο όταν γίνει expire το session.

    Φαντάζομαι ότι θα μπορούσες με javascript στη σελίδα σου να κάνεις ένα AJAX style post στο κλείσιμο του IE. Πάντως ακόμα και έτσι να το κάνεις, τί γίνεται στην περίπτωση που ο χρήστης δεν κλείνει τον IE, αλλά απλά κάνει navigate σε άλλο site; Θα στείλεις notification στον server ότι έφυγε ο χρήστης; Και αν μετά από 5 δευτερόλεπτα πατήσει το back του IE; Το θεωρείς ότι έχει φύγει ή όχι; Πιστεύω ότι δεν θα πρέπει να βασίζεσαι στο state του IE, αλλά αποκλειστικά και μόνο στο state του session.


    Χρήστος Γεωργακόπουλος
  •  18-05-2006, 09:44 12900 σε απάντηση της 12886

    Απ: Ενημέρωση table μετά από κλείσιμο του IE

    Το μόνο σίγουρο είναι ότι το session_end θα εκτελεστεί όταν κάνει timeout το session. Ο χρόνος αυτός είναι συνήθως αρκετά λεπτά. Αν θες να γίνει η ενημέρωση γρηγορότερα θα πρέπει  να πιάσεις το close event στον Internet Explorer με javascript. Το τί θα κάνεις μετά ... μπορείς να ανοίξεις σε ένα νέο παράθυρο μια σελίδα .aspx η οποία θα κάνει τη δουλειά που θέλεις και μετά θα εμφανίσει ένα μηνυματάκι "Ευχαριστώ που φύγατε" ή κάτι παρόμοιο. Βέβαια, ένα popup blocker μπορεί να το χαλάσει αυτό. Μπορείς να χρησιμοποιήσεις XMLHTTP για να καλέσεις το server. Αλλά δεν ξέρω κατά πόσο είναι αυτό δυνατόν όταν ο browser κλείνει.

    Μία άλλη λύση είναι να φτιάξεις ένα κρυφό frame/iframe το οποίο θα ανανεώνεται συχνά και θα χρησιμοποιείται σαν "keep-alive" για το session του χρήστη. Όταν δηλαδή καλείται η σελίδα του frame θα σημειώνει κάπου στο server την ώρα της ανανέωσης. Όποιος client δεν έχει ανανεωθεί για x λεπτά θεωρείται νεκρό οπότε καλούμε τον κώδικα για να γεμίσουμε τον πίνακα. Ή μπορείς να χρησιμοποιήσεις το XMLHTTP για να κάνεις το ίδιο.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  18-05-2006, 12:23 12918 σε απάντηση της 12900

    Απ: Ενημέρωση table μετά από κλείσιμο του IE

    Μάλλον έχει ηχώ εδώ μέσα... :-)

    Σε πρόλαβα Παναγιώτη...


    Χρήστος Γεωργακόπουλος
  •  19-05-2006, 19:15 13011 σε απάντηση της 12918

    Απ: Ενημέρωση table μετά από κλείσιμο του IE

    Ευχαριστώ για τις απαντήσεις.

    Τελικά, επέλεξα το session_end με timeout="1" για να γίνονται οι ενημερώσεις, οι οποίες δεν είναι κάτι πολύ σημαντικό για τη λειτουργία της εφαρμογής.

    Κάτι τελευταίο:το timeout αφορά τον χρόνο που ένας χρήστης δεν αλληλεπιδρά με τη σελίδα της εφαρμογής ή κάτι άλλο;

    Ευχαριστώ...

     

  •  19-05-2006, 19:22 13012 σε απάντηση της 12886

    Απ: Ενημέρωση table μετά από κλείσιμο του IE

    Παράδεγιμα:

    Αν εγώ φορτώσω τη σελίδα, και κάνω login, έχω ένα λεπτό για να κάνω οτιδήποτε. Αν περάσει αυτό το λεπτό και δεν κάνω refresh ή πατήσω κάποιο link ή γενικότερα δεν αλληλεπιδράσω με τη σελίδα, ο server με ξεχνάει (και πρέπει να ξανακάνω login).

    Γι' αυτό το λόγο η χρήση του timeout Στο 1 λεπτό, καθιστά προβληματική την πλοήγηση, και αυξάνει το φόρτο του server (ο οποίος πλέον αναλαμβάνει να δημιουργεί και να καταστρέφει sessions με πολλαπλάσια συχνότητα).
    Μην αφήνετε τα media να σας "ταΐζουν"!
  •  19-05-2006, 19:46 13013 σε απάντηση της 13011

    Απ: Ενημέρωση table μετά από κλείσιμο του IE

    Να το θέσουμε λιγό σωστότερα θεωρητικά: Αφορά τον χρόνο που δεν υπάρχει επικοινωνία με τον server χρησιμοποιώντας το ίδιο session id.
    Χρήστος Γεωργακόπουλος
  •  19-05-2006, 20:39 13022 σε απάντηση της 12886

    Απ: Ενημέρωση table μετά από κλείσιμο του IE

    Παράβλεψή μου, πέρασα απ' ευθείας στο παράδειγμα!
    Μην αφήνετε τα media να σας "ταΐζουν"!
  •  19-05-2006, 22:18 13028 σε απάντηση της 13022

    Απ: Ενημέρωση table μετά από κλείσιμο του IE

    Το αρχικό μου πρόβλημα ήταν ότι ήθελα να ενημερώνω τον SQL Server με ένα online flag γιά κάθε χρήστη. Το πρόβλημα υπήρχε όταν κάποιος κλείνει τον ie. Τελικά εγκατέλειψα τη λύση της άμεσης ενημέρωσης της βάσης και κατέληξα στα εξής:

    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
    Application("ActiveUsers") = 0
    End Sub

    Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
    Session("Start") = Now
    Application.Lock()
    Application("ActiveUsers") = CInt(Application("ActiveUsers")) + 1
    Application.UnLock()
    End Sub

    Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
    Application.Lock()
    Application("ActiveUsers") = CInt(Application("ActiveUsers")) - 1
    Application.UnLock()
    End Sub

    Ο τρόπος αυτός και με timeout =1 δεν είναι ο πιο αξιόπιστος, αλλά τον χρησιμοποιώ. Πάντως δεν έχω προσέξει κάτι περίεργο με τη σύνδεση με το server λόγω του timeout.

    Έχετε να προτείνετε κάτι άλλο;

    Ευχαριστώ ...

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