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

 

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

window.open loses session

Îåêßíçóå áðü ôï ìÝëïò saslanis. Τελευταία δημοσίευση από το μέλος George J. Capnias στις 13-08-2008, 18:56. Υπάρχουν 1 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  13-08-2008, 12:32 44077

    window.open loses session

    Το βρίσκω παντού στο δίκτυο σαν πρόβλημα, λύση δεν βρήκα.

    Από μια φόρμα ανοίγω νέο παράθυρο. Αυτό γίνεται με δύο τρόπους ή modal ή modelles

    Ο κώδικας javascript που χρησιμοποιώ είναι:

    <script type="text/javascript" language="javascript">

    function openWindow(url, name, width, height)

    {

       window.open(url,name,'height='+ height +',width=' + width + ',toolbar=yes, directories=yes, status=yes, menubar=yes, scrollbars=yes, resizable=yes ,modal=no');

    }

    function openModalWindow(url, name, width, height)

    {

       if (window.showModalDialog) {

          window.showModalDialog(url,name,'dialogWidth:' + width + 'px;dialogHeight:' + height + 'px');

       }

       else

       {

          window.open(url,name,'height='+ height +',width=' + width + ',toolbar=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no ,modal=yes');

       }

    }

    function closeWindow()

    {

       window.opener = self;

       window.close();

    }

    </script>

     

    Το άνοιγμα γίνεται σε AJAX σελίδα καλώντας μια βοηθητική συνάρτηση

    HelperFunctions.OpenWindow(ScriptManagerMain, formRouteManagement, "RouteForm.aspx", String.Format("RouteID={0}", routeID), "RouteForm");

    η οποία είναι:

    public static void OpenWindow(ScriptManager scriptManager, Control control, string url, string parameters, string name, int width, int height)

    {

    string command;

    if (parameters == "")

    {

       command = string.Format("openWindow(\"{0}?{1}\", \"{2}\", {3} ,{4});", url, DateTime.Now.Ticks, name, width, height);

    }

    else

    {

       command = string.Format("openWindow(\"{0}?{1}&{2}\", \"{3}\" ,{4}, {5});", url, parameters, DateTime.Now.Ticks, name, width, height);

    }

       scriptManager.RegisterDataItem(control, command);

    }

    ή καλώντας την

    HelperFunctions.OpenModalWindow(ScriptManagerMain, formRouteManagement, "FormRouteStopManagement.aspx", "", "FormRouteStopManagement", 1000, 800);

    η οποία αντίστοιχα είναι:

    public static void OpenModalWindow(ScriptManager scriptManager, Control control, string url, string parameters, string name, int width, int height)

    {

      string command;

    if (parameters == "")

    {

       command = string.Format("openModalWindow(\"{0}?{1}\", \"{2}\", {3} ,{4});", url, DateTime.Now.Ticks, name, width, height);

    }

    else

    {

       command = string.Format("openModalWindow(\"{0}?{1}&{2}\", \"{3}\" ,{4}, {5});", url, parameters, DateTime.Now.Ticks, name, width, height);

    }

    scriptManager.RegisterDataItem(control, command);

    }

    Οι σελίδες που ανοίγουν στην αρχή τσεκάρουν μια μεταβλητή στο Session.

    Όταν η σελίδα ανοίγει με την OpenModalWindow (καλεί την java openModalWindow που με την σειρά της την window.showModalDialog) όλα είναι καλά.

    Όταν η σελίδα ανοίγει με την OpenWindow( καλεί την openWindow που με την σειρά της καλεί την window.open) το session χάνεται η νέα σελίδα ανοίγει σε νέο session.

    Η συμπεριφορά αυτή εξαρτάται από το ποια σελίδα ανοίγει την νέα. Έτσι αν ο Opener είναι Modal το session χάνεται. Αν είναι modelles το session διατηρείται.

    Καμιά ιδέα; προφανώς θέλω το session να διατηρείται και στο νέο παράθυρο.


    Stefanos Aslanis
  •  13-08-2008, 18:56 44083 σε απάντηση της 44077

    Απ: window.open loses session

    Έχω την εντύπωση ότι αυτή είναι λειτουργία by design, και είναι για να απομονώνονται τα session, από τα παράθυρα/tabs του browser μεταξύ τους - να μην μπορεί ένα παράθυρο/tab να κάνει cross/scripting σε κάποιο άλλο.

    Για την αντιμετώπιση του προβλήματός, έχω δύο προτάσεις:

    • Μπορείς να μην χρησιμοποιήσεις την window.open, αλλά κάτι πιο Ajaxian, όπως τα LightBox/LightBox2 που δίνουν παρόμοια εφέ (modal dialog επάνω σε html σελίδα).
    • Να αντιμετωπίσεις την ύπαρξη του session διαφορετικά, όχι συνεδεμένο με το server, αλλά επάνω στο χρήστη σε ενδιαφέρει - θα πρέπει να να έχεις ένα object τύπου dictionary, που θα αποθηκεύεται μέσα στο application cache και να είναι συνδεδεμένο με το χρήστη και όχι στο session.

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems