Avatar billede Syska Mester
08. maj 2007 - 22:00 Der er 8 kommentarer og
2 løsninger

OutputCache og login, yak

Hej,

Jeg er ved at lave en side med login og det hele ...

Nogle sider henter mange ting fra en databasen, så jeg har slået OutputCache til, noget ala:
<%@ OutputCache VaryByParam="*"  Duration="600" %>

Så går jeg ud fra, alt efter parameters at den cacher ... og det virker sådan set fint ...

Dog har jeg en login control som ligger på min master page ... den bliver også cached på de sider, og det er jo ikke skide smart ... da det så ser ud som om man ikke er logget ind, selvom man reelt er det ...

Så hvordan løser man lige det nemmest og gerne guides etc. til det ... læste på en side at man skulle smide det hele i en usercontrol ... og så lave cache på den ... men det virker lidt, som en mærkelig måde at gøre det på, men ved selvfølgelig ikke om det er den eneste måde at gøre det på ...

Well, hit it ...

Spørg endelig hvis der skulle være brug for flere informationer ...

// ouT
Avatar billede snepnet Nybegynder
08. maj 2007 - 23:38 #1
Det er nu ikke så mærkeligt endda... Konceptuelt svarer det til, at du angiver at hele siden skal caches, på nær en specifik del af siden (din usercontrol), så den holder ok synes jeg.
Der findes en særlig kontrol (Substitution) der giver dig muligheden for at få renderet specifikke elementer dynamisk på en cached side.
Den tilbyder begrænsede muligheder (du kan kun få returneret en string fra en statisk metode - som dog godt kan indeholde det html du måtte have lyst til skrive), og du kan se et lille eksempel her:
http://www.w3coder.com/aspnet2/Substitution.aspx
... Den kunne du evt. kaste et blik på.
Mvh
Avatar billede Syska Mester
09. maj 2007 - 14:05 #2
Hvis jeg forstår dig korrekt ... så de User Controls jeg ikke vil cached kan jeg smide i en Substitution control på mine UC'er ?
Avatar billede Syska Mester
09. maj 2007 - 14:14 #3
ja, kan godt se konceptet i det ... men ikke lige hvordan jeg fikser det så min LoginControl bliver opdateret på mine sider som er cached ... da det lader til at Substitution vil have en string tilbage ... og det producere min User Control ikke. ( er ikke så meget inde i UC verdenen )

// ouT
Avatar billede akempff Nybegynder
09. maj 2007 - 15:16 #4
Måske du kunne cache mere manuelt på de tunge metoder som nedenunder f.eks.?

public static Account GetAccount(LoginInfo loginInfo, int accountID)
        {
            string cacheKey = "ACCOUNTID_"+accountID.ToString();

            AccountContainer accountContainer = HttpRuntime.Cache[cacheKey] as AccountContainer;
            if (accountContainer == null)
            {
                  //hetn dit object, her container
                accountContainer = dosomethingandreturnContainer();

                HttpRuntime.Cache.Insert(cacheKey, accountContainer, null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(0, 10, 0));
            }
            return accountContainer.account;
        }
Avatar billede Syska Mester
09. maj 2007 - 15:52 #5
Well, det er faktisk sådan noget ala det som bliver gjort nu, bliver bare gemt i Session ... dvs per user basis ...

Jeg kan godt se det smart i den her måde, men det må vel også svare til overstående måde jeg allerede gør det på ...

Men mit problem er hvordan jeg lige meget om jeg står på en cached side eller ej, får vist den rigtige User Control ... da en cached version jo kan finde på at give en anden bruges caches version, hvor et andet username end ens eget så står i, og det er jo ikke smart ...

Alt virker på siden som ikke er cached ... men der er bare nogle side som ikke opdateres tit, og trækker meget fra databasen som vi laver cache på ...

well ... må kigge videre på det ...

// ouT
Avatar billede akempff Nybegynder
09. maj 2007 - 16:18 #6
Ja ok, cache vil ikke rigtig virke anderledes end Session[] hvis det er data specifikt på/til brugeren. Men jeg troede egentlig at den sql tunge data var generel og kun login dataen var et problem at det blev cached.  Der ville du jo kunne cache hele dit dataset og lade være med at cache logininfo eller gøre det i session.

Men jeg tror måske jeg har misforstået.
Avatar billede Syska Mester
09. maj 2007 - 20:09 #7
nej, sådan set ikke ....

En masse kategorier som bliver cached ... de ændres ikke tit, og det er ikke vigtigt at det bliver opdateret med det samme ... så på 3 sider har jeg slået:
<%@ OutputCache VaryByParam="*"  Duration="600" %>
til ... og den cacher og laver refresh efter de 600 sek ... men ... så får brugere jo samme login usercontrol ... men deres specifikke knapper, og det er jo ikke smart ...

Så jeg skal på en nem måde have gjort sådan at de 3 sider ikke cacher min UC ...

Måske kunne man cacher den på samme måde du foreslår ... og så hende den derfra ... ej, ved sq ikke ... det andet virker jo ...

// ouT
Avatar billede akempff Nybegynder
10. maj 2007 - 10:29 #8
Ok.  Det du kunne gøre var så at istedet for at cache de 3 sider komplet med output cache, så cache login UCen i din Session, og cache generelle opslag som dine kategorier i HttpRuntime cachen.  Så din pageload ville hente kategorer fra  HttpRuntime.Cache[] og dine brugerbestemte UC (som login) fra Session[].

Sådan kunne man gøre det ihvertfald, om så det er den bedste løsning her ved jeg ikke,  da jeg aldrig har kigget på substitution som snepnet anbefaler.
Avatar billede Syska Mester
01. juni 2007 - 00:43 #9
indtil videre løst med at smide det hele over i en ny UC som så bliver cached ... men bliver nok lavet senere på en bedre måde ...

smid et svar akempff

// ouT
Avatar billede akempff Nybegynder
01. juni 2007 - 08:08 #10
ok
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester