30. april 2015 - 08:25Der er
3 kommentarer og 1 løsning
Global variable
Hej. Jeg har en situation hvor jeg gemmer nogle valg en kunde har lavet i en javascript variabel.
Løsningen indeholder nogle iframes som igen kan indeholde iframes.
Når brugeren logger på, får de tildelt en nøgle som jeg gerne vil kunne tilgå fra ALLE sider, uanset om det er i vinduets rod, eller i en iframe et stykke nede i hierarkiet.
Det vil sige at hvis kunden logger på i et vindue, vil de få en ny nøgle som kan ses af hele det site, hvis kunden åbner endnu et browser-vindue og logger på, vil de have få en ny nøgle.
Jeg tænker at jeg måske kan lægge nøgle-variablen på window.top objektet, men jeg kan ikke gennemskue om det er en ufornuftig tilgang hvor jeg bare beder om fejl henad vejen og om der er en bedre løsning på problemstillingen..
Det er svært at komme med konkrete forslag uden at kende mere til din løsning - men for mig lyder det skævt med alle de iframes. Hvis formålet er at lave en SPA og altså undgå en masse irelevante sideloads er et js-framework som fx angular nok en bedre løsning.
Ja det har du nok ret i.. Først og fremmest så har jeg ikke kontrol over om der benyttes iframes eller ej.. ..det er et 3. parts produkt der styrer det, så kan man være fan eller ej..
Men mit scenarie svarer til dette, så kan det være nogen kan komme op med et godt forslag;
Jeg har en hjemmeside hvor en bruger kan logge på som administrator. Som administrator kan man vælge et medlem og foretage nogle ting med dette medlem (indtaste telefonnummer, resultater og sådan). Når administratoren vælger et medlem, sætter jeg en variabel på serveren der svarer til administratorGuid.SelectedMemberGuid=memberGuid og gemmer den i memorycache. På denne måde kan jeg blot læse administratorGuid.SelectedMemberGuid for at se hvilket medlem der er valgt, lige meget om jeg står på hovedsiden eller i en eller anden stupid iFrame og jeg har heller ikke problemer hvis sesionen bliver resat af en eller anden grund.
Nu har jeg bare erfaret at administratorerne kan finde på at åbne et browser-vindue på en bruger og et andet browser-vindue på en anden bruger, og det gør så at administratoren tror at det første vindue stadig håndterer første bruger, men reelt set peger på den anden bruger.
Det ser ikke yd til at jeg kan bruge session-variabler eller cookies her, for i hvert fald IE betragter nye vinduer som værende samme session.
- - - - - - - -
Her er det så at jeg godt kunne tænke mig at give hvert vindue (og underliggende iFrames) en id, så jeg kan skelne de to vinduer fra hinanden på server siden..
Noget lignende function jsInit(){ if(!window.top.sessionGuid){ [hent en ny guid fra serveren og brug den ved hvert roundtrip] } }
Gemmer du et id på klienten, om det så er en værdi på windows-objektet eller en data-attribut på et element og om det er en "hemmelig" guid eller id på den valgte bruger får du en masse arbejde med at sende dette id med ned ved hvert eneste kald.
Uden at kende dit scenarie til bunds ville det mest logiske nok have været at benytte querystrings (eller anden variabel i URL'en) til at gemme dit id.
Det eneste jeg nok lige kan komme på ud over tilpasning af URL vil være at gemme det i noget serverkode-styret, det kunne være i viewstate, så du er sikker på at det komme med både frem og tilbage ved hvert request.
Ok.. Denne kom til at ligge lidt længere og er ikke mere aktuel.
Jeg er ved så småt at migrere til MVC, så i den sammenhæng har jeg fået mulighed for at gen-tænke både valg af løsning og valg af komponenter, så jeg kan arbejde udenom problemstillingen og sikkert få et bedre resultat.
..jeg lukker tråden, men tak for dine input.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.