Har ett system byggt i asp.net och använder session variabler för att överföra indormation mellan sidorna. Ligger sidan som innehåller iframen och sidan som visas i iframen på samma domän? Nej de ligger på separata domänadresser och även separata servrar Om du lägger sidorna under samma domän så kommer det troligtvis att fungera. Gissar att detta ska förhindra att om du är inloggad på en sida och sedan besöker en annan som öppnar en iframe med den första sidan så ska du inte längre vara inloggad (så att sida nr 2 kan "sno" information därifrån). De kan inte ligga under samma domän Beror lite på vad det är för data men kan du inte skicka den som querystring till iframen? Går inte då det är relativt stora mängder som lagras tillfälligt. Webben är av naturen stateless (bevarar inte tillstånd mellan anrop) och inget du kan skylla Microsoft för. Det spelar ingen roll vilken teknik du använder (jsp, php mm). Detta får du som du märkt hantera med cookies, sessions, viewstate eller databas. Att webben är stateless har sina fördelar, men också sina nackdelar som du märker. Det är bara att anpassa sig... Jo visst är det trisst att webben inte klarar av att hantera information så det blir enklare att bygga riktiga applikationer på snyggt sätt. Nja, en session är en cookie och lagras i minnet på klienten i krypterad form. Det är bara att googla så kan du läsa mer om hur det hänger ihop. Det jag hittar är bl.a. följande Jo, en session har en serverdel och en klientdel. Klientdelen lagras som en cookie, så jag uttryckte mig lite klumpigt. Bara för att förtydliga lite: "klientdelen" är bara ett unikt id som servern behöver för att koppla rätt data till rätt session. Den information som ska lagras ligger alltså på servern, men nyckeln för att hitta rätt information lagras på klienten. Om antingen nyckeln eller informationen försvinner så utgår servern ifrån att det inte finns någon information lagrad, och påbörjar en ny session och skapar en ny nyckel. Men hur gör man då? Jag har aldrig byggt en webbshopp men jag skulle göra något sånt här: <b>Jag vill inte använda sessions för det är inte riktigt rumsrent. </b> Tänkte bara smyga in ett förslag som ligger en bit utanför området. Ger man sig på LISP istället kan man bygga en continuations-baserad lösning. Bra mycket smartare. defmacro.org, http://www.defmacro.org/ramblings/continuations-web.html, http://www.defmacro.org/ramblings/continuations-web.html. Ett av mina system skulle bli för stort för att lägga som en sida utan behöver vara i flera delar. Nja, Kan ju hålla med om att det hade varit snyggt med typade sessions-variabler. En fuling skulle kunna vara att du skapar ett eget objekt/klass med de egenskaper du vill ha. Sedan lagrar du en instans av den klassen i en sessionsvariabel. När du sedan vill använda variablerna får du casta objektet till din klass och så blir det typat sedan. Verkligen ingen snygg lösning, men om det är detta man är ute efter så... Så här kunde det gått till Nja, det där tror jag inte alls på, det skulle kräva ändringar i _alla_ språk som någonsin skulle behöva användas i asp.net, dvs. inte särskilt troligt.. Niklas: Det där var lite snyggt :) Funderar på hur man skulle kunna göra i t.ex. asp.net nu :)Problem med iframe och session
Valde sessions istället för cookies då vissa inte gillar att man använder cookies
När samma system anropas med en sida där anropet ligger i en iframe så tappar systemet sina sessionsvariabler.
Underar vad som är felet och hur man ska göra?
Sidan med iframen visas bra men programmet som körs i fönstret (själva iframen) funkar inte då den tappar session variablerna vid byte av sida (inne i iframen).
Går det att ha iframe och session variabler?
mvh RolandSv: Problem med iframe och session
/JohanSv:Problem med iframe och session
iframe och sessions och givetvis mitt system funkar faktiskt om man kör med Firefox men inte med IE
Har dock hittat problemet och det är att Internet Explorer inte tillåter sessions
Har lagt till en sådan här i varje page load och sedan en i MasterPage för hela systemet.
HttpContext.Current.Response.AddHeader("p3p", "CP=\'IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\'")
Hittade den via sökningar om problem med iframe och session. Nu funkar allt även i IE
Någon vänlig kanske berättar lite om vad den gör och varför på mer begripligt sätt.
Om det nu handlar om säkerhet varför i he.... kan inte microsoft fixa så man kan bygga riktiga system med asp.net?
Alltså så man kan jobba normalt med att använda variabler under hela programkörnignen.
Bygger man system motsvarande sådant som tidigare var vanliga program för installation på respektive dator och nu kör sådant via webblösningar behöver man fortfarande använda variabler som är aktuella mellan olika sidor. Jag har löst det genom att lägga allt sådant i sessions. Alltså alla enskilda variabler och struct och arrayer som jag behöver på nästa sisda också.
Varför finns det ingen riktig hantering för sådant?
De alternativ man har är cookies, seesionsvariabler, viewstate eller lagra det i en databas.
Men att lagra i en databas mellan sidhopp är kass då sådant tar tid och måste rensas när användaren försvinner. Cookies är av vissa förbjudet och sessions samt viewstate ungefär samma och inte heller det riktigt rumsrent. Att använda hidden fields är ju samma som viewstate. dessutom är viewstate kass då det ska slussas fram och tillbaka mellan server och klient.
Vad ska man då använda?
Varför inte globala variabler och inte sessions som man tydligen inte vill tillåta riktigt samt massa pyssel.
Jo jag har class med hantering av sessions för mina globala variabler men onödigt krångel och skulle funnits riktiga globala variabler från början.
Något som ser ut så här i VB (ni som kör c# förstår garanterat)
Dim antal As Integer 'lokal variabel
Dim antal As Global Integer 'global variabel som gäller så länge användaren är kvar eller man släpper variabeln
Antingen är det jag som missat något eller så vet man inte hur man bygger system.
(hoppas på första alternativet)
mvh RolandSv: Problem med iframe och session
/JohanSv:Problem med iframe och session
Sidan med iframes tillhör ett utländskt företag som kör flera olika underleverantörers sidor i sin egen sida.
Den sida som ligger i iframen tillhör ett Svenskt företag, applikationen som får problem nu.
Se det som ett objekt som ärvs av ovanstående system (det med iframe). Det är väll så det är mening med objektorienterad programering.
Angående skydd så kunde ett riktigt system spärra åtkomsten till variabler att gälla inom egen applikation. Nu är jag ute på hal is men är inte detta något som kallas inkappsling?
Vi är nu inne på 2009 och moderna system borde väll kunna hantera räckvidden för data?
Utökat från mitt tidigare exempel kan vara så här
1. Dim antal As Integer 'lokal variabel
2. Dim antal As Application Integer 'variabel inom applikationen
3. Dim antal As Session Integer 'variabel som även når andra applikationer inom samma session
4. Dim antal As User Integer 'variabel som även når andra applikationer inom samma dator
5. Dim antal As Global Integer 'global variabel som även når andra användare
Trodde jag knäckt problemet då jag hittade tekniken med Module och static variabler. Men de blev verkligen globala, De gäller över samtliga användare av samma applikation.
Alltså har jag nu alternativ 1 och 5 men behöver alternativ 2 utan att använda sessions.
Men sådant måste man tänkt på och jag ha missat.
Snälla hjälp med tipps.
mvh RolandSv: Problem med iframe och session
<iframe src="http://www.sida.com/hej.aspx?id=12"></iframe>Sv:Problem med iframe och session
upp till 10k
Däremot få samtidiga användare, max 10, så minnet på servern blir inget problem.
Däremot vill jag ha något mer rumsrent än sessions.
T.ex. hur seriöst är fölljande hantering av data
Dim antal As Integer
antal = 10
Session("antal").toString = antal
antal = Cint(Session("antal"))
Dessutom behöver jag kolla att Session("antal") är numeriskt så jag inte åker på pumpen.
Knappast något som hör till moderna utvecklingsmiljöer.
Jag måste missat något viktigt.
Tipps?
mvh Roland
Sv: Problem med iframe och session
Kom ihåg att Sessions bara är en form av en cookie, så har användaren stängt av cookies så funkar inte sessions heller.Sv:Problem med iframe och session
En fundering på cookies och sessions
Är det inte så att cookies lagras på klienten och sessions på servern?
Dumt att slussa data fram och tillbaka över nätet i onödan.
Angående Microsofts fel eller inte. Trist att just seesions inte funkar med iframe på just deras IE men fungerar perfekt på Firefox.
Tilläggas att jag inte är en Firefox fantast utan kör till 99% IE
Dessutom hade det ju varit smart om MS med VS och asp.net löst uppgiften med data som behöver lagras på ett snyggare sätt än just i Sessions. Som dessutom av användare går att blockera.
Man hade bara sett till att lagra datan på servern och löst stateless med ett id som komuniseras mellan användare och klient.
Men man behöver inte skylla på någon alls utan endast se möjligheterna :)
mvh RolandSv: Problem med iframe och session
Sv:Problem med iframe och session
Session variables are stored on the server. What is stored in a cookie is
the session id. It is used to restore the session variables on the server
when client's postback arrives.
http://www.velocityreviews.com/forums/t93652-where-are-session-variables-stored-on-client.html
mvh RolandSv: Problem med iframe och session
Sv:Problem med iframe och session
Nyckeln kan lagras som en cookie på klienten (vanligast) eller i t.ex. querystringen.
I det här fallet så strular det nog med cookies, och det är där felet behöver hanteras.
(Sedan vet jag inte riktigt om jag tycker att sessions är rätt sätt att hantera problemet på, just för att sessions inte har någon direkt koppling till en instans av ett webbläsarfönster - information skulle kunna kopplas till fel fönster om det vill sig illa)Sv: Problem med iframe och session
Enkelt exempel.
Antag att man har tre fönster
1. Användaren skriver in data iform av namn, adress, mm
2. Väljer produter som sparas i en "kundvagn"
3. Kassa. Där innehåll i kundvagn visas och även användarens namn och adress.
På 3:e sidan kan man bekräfta ordern och då lagras den i en databas samt skickas via mail till kunden.
Jag vill inte använda cookies på grund av vissa användare som spärrar detta.
Jag vill inte använda sessions för det är inte riktigt rumsrent.
Data ska vara kvar på servern fram tills de lagras i en databas vid bekräfta.
Helst vill jag givetvis använda vanligt sätt att lagra informationen i variabler med arrayer där så behövs.
Och säkerhet så ingen annan sida kan snappa upp seesionsvariablerna mm.
Detta är data som ska ligga på servern under berabetning och först vid bekräfta order skrivas till databasen. Alltså inte skrivas för att sedan ibland behöva rensas från databasen.
Lösning?
Mitt fall ser inte precis likadant ut men ovanstående är enklare att förstå.
mvh RolandSv:Problem med iframe och session
Förutsatt att webbshoppen inte kräver inloggning förens man ska checka ut:
När man lägger sitt första item i kundvagnen skapas en session som vi kan kalla KundvagnsId. Samtidigt skapas en rad i en databastabell kallad "Kundvagn" samt en rad i "Beställninar". Beställningen är länkad till kundvagnen och kundvagnen är länkad till ditt sessionsid.
Nästa gång någonting läggs i kundvagnen behöver du ju förstås inte skapa en ny kundvagn eller session utan endast en ny rad i Beställningar som är kopplad till din kundvagn.
När man checkar ut flyttas datat bara om lite till nya tabeller.
Du kanske kan göra något liknande förutsatt att båda sidorna kan prata med samma databas. Då behöver du bara skicka ett id till iframen (querystring).Sv:Problem med iframe och session
Utveckla gärna varför det inte skulle vara "rumsrent".
Jag hade använt mig av sessions-variabler, det är precis vad de är till för. Alternativt cookies för att behålla kundvagnen när besökaren lämnar sidan och kommer tillbaka vid senare tillfälle. Ytterligare ett alternativ är att lägga hela proceduren i samma ASP.NET-sida och skapa de olika "sidorna" som olika views. Eftersom du hela tiden ligger kvar på samma sida så kommer du fortfarande åt innehållet i kontrollerna på föregående sidor.
/JohanSv: Problem med iframe och session
Sv: Problem med iframe och session
Detta är jag säkert inte ensam om även om vissa mindre system går att lösa på förslaget sätt. Vissa delar av mina system hanteras enligt föseslagen metod med alla delar på samma sida.
Jag använder uteslutande sessions för lagrimg av data mellan de olika sidorna förutom att fälten på sidan lagras via viewstate av asp.net självt.
Detta anser jag inte vara "rumsrent"
1.
Exmpel på hantering av "variabler" med sessions
Dim antal As Integer
antal = 10
Session("antal").toString = antal
antal = Cint(Session("antal"))
Stora risker med att man kan skriva vilket variabelnamn som helst och allt måste lagras som strängar.
T.ex. skriver man Session("antall") och tidigare skrivit Session("antal") så går detta jättebra men blir totalt fel.
2.
Användare kan spärra cookies och därmed så måste SessionID hanteras via url.
3.
Iframe och IE fungerar inte för att säkerheten inte kan garanteras att någon annan process kan plocka värden (är vad jag kommit fram till) Då har väll även Microsoft kommit fram till att sessions är något som katten släpat in.
Måste väll finnas något riktigt sätt att hantera data under sessionen?
Så här borde det gå till.
Man deklarerar de variabler applikationen behöver för varje användare. Dessa lagras i serverns minne under den tid som användaren är igång med appliationen på liknande sätt som sessions variabler idag hanteras. Dessa variabler kan applikationen använda fär aktuell användare utan proble med iframes eller spärrar för cookies mm. Men viktigt är att varibler, arrayer mm kan deklareras op riktigt sätt och inte det förhistoriska sätt som det idag är vilket påminner om skiten som var på 80 talets början.
För VB brukar man vara tvungen att slå på "Option Explicit" lite pinsamt men i c, c++ och c# och andra modernarer språk är ju kravet på riktigt deklarerade variabler.
Så varför införa en ny utveklingsmiljö för webben, asp.net, och samtidigt inte göra ett smack åt hantering av data utan att tillåta/kräva hantering visa session??? Detta anaser jag inte vara rumsrent.
Har försökt få till det lite bättre med en class för hantering av sessions samt variablenamnet som en konstant men här är min kunskap för begränsad för att få till något riktigt bra.
Kanske någon som kan bidraga med bättre lösning för hantering av Sessions?
mvh RolandSv:Problem med iframe och session
1) Nyckeln måste vara en sträng, men data kan vara vad som helst, måste inte vara en sträng. Däremot så måste man casta eftersom att session(x) bara returnerar enligt datatypen objekt, även fast den egentligen returnerar t.ex. en sträng, en integer, eller ett dataset.
2) Det finns inbyggt i asp.net, cookieless mode eller något sådant heter det.
3) Nja, snarare att just IE kan hålla isär olika processer - i en process kan IE köra flera fönster, men IE kan även köra flera processer. Det är inom varje process som t.ex. sessioncookies är "lokala". Andra webbläsare, t.ex. firefox och google chrome fungerar inte så, de har en enda process (även om chrome har flera processer för att rendera, men det är fortfarande bara en process att bry sig om som webbutvecklare), och där gäller alltid alla sessioncookies för alla fönster.
"Fenomenet" kan enklast visas genom att gå in på en site, logga in, och sedan öppna ett nytt webbläsarfönster, dels genom ctrl+n och dels genom att köra genvägen på startmenyn. I det senare fallet kommer IE att skapa en ny process.
--
Problemet med att ha variabler på det sätt du föreslår är att det kräver ett nytt språk, vb.net/c#/etc måste anpassas. Som det är nu så är asp.net bara ett gäng klasser, men nu vill du även ändra själva språket.
En lösning på ditt problem är att bygga lite eget:
1) Kör med sessions
2) Kör med konstanter/enums som nycklar till sessions (garanterat rätt nycklar pga felstavad konstant => kompileringsfel)
3) Wrappa sessions med egna properties (typsäkert och lättanvänt)
Sessions är det inget större fel på, och att använda en cookie för att spara id:t är inte särskilt unikt för asp.net, alla andra webbspråk gör likadant (och har således samma begränsningar.) Att lösa ditt iframeproblem kräver att du gör dig av med dina cookies/kollar upp vad det beror på i detalj och löser det.Sv:Problem med iframe och session
<b>Användare kan spärra cookies och därmed så måste SessionID hanteras via url.</b>
Anser nog att detta är besökarens problem. Väljer man att inte acceptera cookies så får man stå ut med att vissa sidor inte fungerar. Det är ett val man gör. På det sättet HTTP ser ut idag så är cookies ett krav för att kunna skapa den funktionalitet besökaren förväntar sig.
HTTP är stateless, så alla sätt att hålla state är någon form av workaround. Därav fungerar inte alls på samma sätt som när man bygger en Windows-applikation. Det är väl det som är lite problemet med VS. Miljön för att utveckla web och windows upplevs snarlik, men förutsättningarna är helt annorlunda. Utvecklingen går mot att det blir mer och mer likt, men VS har inte kommit ända fram ännu. Sedan kan man ju fråga sig om det är det man stävar efter, att bygga webapplikationer på samma sätt som windowsapplikationer... Det krävs att utvecklingsmiljön döljer ganska mycket av det bakomliggande för att det ska fungera.
<b>Iframe och IE fungerar inte för att säkerheten inte kan garanteras att någon annan process kan plocka värden (är vad jag kommit fram till). Då har väll även Microsoft kommit fram till att sessions är något som katten släpat in.</b>
Nja, det är väl snarare iframes som ställer till det för dig (givetvis är det kombinationen, men då iframes får anses vara den fula ankungen så känns det bättre att skylla på det här också ;). Personligen tycker jag att man ska hålla sig ifrån dem, det är ytterst sällan man ser någon sida med iframes som fungerar på ett tillfredställande sätt, men det är min personliga uppfattning...
/JohanSv: Problem med iframe och session
I utvecklingsmiljön skriver man med typade variabeler
t.ex.
Dim antal as Global Integer 'egen påhittad variant för att få en global variabel för sessionen
Dim antal2 As Integer
antal = 10
antal2 = antal
Preprocessor gör om detta till
Dim antal2 as Integer
Session("antal").toString = 10
antal2 = Cint(Session("antal"))
och allt funkar som det skulle och vi har fått ordning på en del av eländet.
Hade sedan SessionID körts via hidden field så hade Cookies eller via url ej behövts för detta.
iframe kan jag hålla med om att det blir problem men detta anavänds av vissa kunder och kunden har alltid rätt.
mvh RolandSv:Problem med iframe och session
Vad man skulle kunna göra är att göra ett tillägg i asp.net, dvs. att man i aspx-filerna kan lägga till "session-properties" som i runtime skapar properties och mappar mot sessionsSv:Problem med iframe och session