Finns det något sätt man kan låsa en sida så att bara en åt gången kan vara inne, eller? Det borde gå med Application, ifall Application är mer än 1 så "visas" den inte. Tex. en Redirect till en annan sida. MEN, ett rätt stort MEN. ...Sedan kommer applikationen att köras på mer än en server och helt plötsligt har man stora problem ,) Det är iofs inte ett problem i asp.net, räcker att slå på stateserver. Vi har dels tunna klienter på jobbet, dels ligger vi utspridda lite varstans i Sverige och världen. Därför gör vi applikationer i ASP.NET. I applikationerna finns det uppdrag som man ska behandla. Anledningen till låsning av sidan är att inte två ska kunna komma in på samma uppdrag samtidigt. Borde kanske gå att lösa på ett enklare sätt genom att sätta nån flagga i databasen att en post just redigeras? 1. Menar du att 1 sida = 1 uppdrag? Använder du inte en mallsida för själva hanteringen där innehållet (uppdraget) hämtas i databasen? Om det finns mer än ett uppdrag så skulle en låsning av sidan då innebära att ingen kan ändra i något annat uppdrag heller.Låsa sidor
Sv: Låsa sidor
/mSv: Låsa sidor
Säg att en användare går in på sidan, applikationsvariabeln sätts och sidan låses. När användaren lämnar sidan på de tillgängliga sätten som finns så öppnas sidan. Då till problemet. Om användaren backar, skriver in en annan URL, eller stänger ner webbläsaren så är sidan fortfarande låst.
Får man fråga varför sidan måste låsas för en person i taget? Tänkte om det kanske finns några andra vägar runt.Sv: Låsa sidor
Sv: Låsa sidor
Men Patrik har rätt. Applikationsvariabeln är inte i närheten stabil att nyttja, överhuvudtaget så gör uppbyggnaden av HTTP och browsers att det inte riktgt har den tekniska möjligheten att lösa sådan här problem.
Man skulle kunna tänka sig en applikationsvariabel med en timer som failsafe, men då kanske den låser rätt länge.
Ett bättre sätt skulle kanske vara att använda inloggning. Att du måste logga in på sidan och bara en person kan vara inloggad åt gången med det unika ID't, men då får du istället problem på andra håll.Sv: Låsa sidor
Sv: Låsa sidor
Om en börjar redigera så markeras posten med kanske användarens login, när nästa kollar listan med uppdrag ser han att posten redan är låst.
Då kan ju problemet uppstå att anv nr 2, har tagit fram listan, tagit fika, och under tiden så börjar anv nr 1 att redigera en post. Det som då skulle kunna göras är att på editeringssidan initialt även göra en extra koll om posten redigeras, innan man kommer till redigeringläget.
Månting åt det hållet hade nog jag funderat på att lösa problemetSv: Låsa sidor
2. En "låsning" i databasen är en bättre lösning. MEN, det kräver stenhård disciplin av användarna. Om ett uppdrag "checkas ut" så måste det "checkas in" efter användning. Annars låses det och ingen kan komma åt det förrän någon går in i databasen och låser upp. Denna disciplin är svår att uppnå för det är väl människans natur att slöa till lite och i det här fallet innebär det en låsning.
3. Ett sätt att närma sig en lösning med låsningen i databasen är t.ex. att man, som Ulf nämnde, har en flagga. När ett uppdrag checkas ut sätts flaggan lika med användarens ID. I global.asax Session_Out så läggs ett databas anrop som sätter alla flaggor lika med 0 där användarens ID finns. På det sättet så blir en låsning max den längd en Session finns kvar. Då kanske man bör minska timeouttiden. Man bör även lägga in säkerhetskoll på "hanteringssidan" så att man inte kan utföra ändringen om sessionen gått ut. Dvs. om man börjar ändra i ett uppdrag och sen tar kafferast mitt i så kommer man få en timeout under tiden. När man kommer tillbaka, ändrar färdigt och trycker på OK så får man kolla att sessionen lever.