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

-
Μέλος από τις 27-02-2008
-
Neo Iraklio
-
Δημοσιεύσεις 4
-
-
|
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
|
|
Απ: 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.
|
|
|
|
|