/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Problem med forældet asp-side
Fra : Stig Holmberg


Dato : 30-05-02 11:23

Hej NG

Jeg har lavet et lille websted med *.asp-sider og en Access database.

Man har mulighed for at tilføje, redigere, slette emner.

Problemet er: Hvis man sletter et emne og derefter klikker på
tilbage-knappen i browseren kan man komme til en side hvor det slettede emne
stadig er med.

Hvis man så fra denne forældede side forsøger f.eks. at redigere det
slettede emne får man selvfølgelig en fejl (ADODB.Field error '800a0bcd'
Unknown runtime error)

Jeg har prøvet at sætte diverse no-cache og expire kommandoer ind i toppen
af siden, men det medfører bare en ny fejl:

"The page you requested was created using information you submitted in a
form. This page is no longer available. As a security precaution, Internet
Explorer does not automatically resubmit your information for you.

To resubmit your information and view this Web page, click the Refresh
button"

Og når man så gør det optræder mit slettede emne lige pludseligt 2 gange!


Hvad gør jeg?

Her er nogle af de kommandoer jeg har prøvet med:

<%
'date in the past...
Response.AddHeader "Expires", "Mon, 26 Jul 1997 05:00:00 GMT"
'always modified
Response.AddHeader "Last-Modified", Now & " GMT"
'HTTP/1.1
Response.AddHeader "Cache-Control", "no-cache, must-revalidate"
'HTTP/1.0
Response.AddHeader "Pragma", "no-cache"
'last ditch attempt!
Response.Expires = -1
%>

Mvh. Stig



 
 
Kim Bach Petersen (30-05-2002)
Kommentar
Fra : Kim Bach Petersen


Dato : 30-05-02 13:18

> Problemet er: Hvis man sletter et emne og derefter klikker på
> tilbage-knappen i browseren kan man komme til en side hvor det slettede
emne
> stadig er med.

Tilbage-knappen henter siden fra browserens cache uden at lave en ny request
til serveren, så derfor opdaterer siden ikke. Lav et link til siden i
stedet, så den hentes på ny fra serveren eller brug response.redirect efter
formular-behandlingen - så er du sikker på at listen er opdateret.

Kim



Stig Holmberg (30-05-2002)
Kommentar
Fra : Stig Holmberg


Dato : 30-05-02 13:48

"Kim Bach Petersen" <kim@kensho.dk> wrote:
Tilbage-knappen henter siden fra browserens cache uden at lave en ny request
til serveren, så derfor opdaterer siden ikke. Lav et link til siden i
stedet, så den hentes på ny fra serveren eller brug response.redirect efter
formular-behandlingen - så er du sikker på at listen er opdateret.

Kim


Hej Kim, Tak for dit svar.

Humlen i det hele er at brugerne af databasen kan finde på at klikke på
tilbage-knappen i browseren og komme tilbage til den forældede side, det
hjælper jo ikke dem at jeg ved jo godt at det skal man ikke gøre. Der er
link mellem alle sider, men folk navigerer jo som de har lyst til - også med
tilbage-knappen.

Der er en Response.Redirect (der redirecter til den side fejlen opstår på)
efter formular-behandlingen (den formular der sletter et emne) men der
ligger stadig en forældet version af samme side i browserens cache.

Jeg er fortvivlet, har brugt 2 dage på at løse dette problem.

Mvh. Stig




Michael Kjeldsen (30-05-2002)
Kommentar
Fra : Michael Kjeldsen


Dato : 30-05-02 14:14

> Hej Kim, Tak for dit svar.
>
> Humlen i det hele er at brugerne af databasen kan finde på at klikke på
> tilbage-knappen i browseren og komme tilbage til den forældede side, det
> hjælper jo ikke dem at jeg ved jo godt at det skal man ikke gøre. Der er
> link mellem alle sider, men folk navigerer jo som de har lyst til - også
med
> tilbage-knappen.

<body onload="this.document.refresh"> (eller lign.)
--
Mangler du inspiration?
http://www30.brinkster.com/criteriu/index.asp?page=cool
Savner du spræl på skrivebordet?
http://www30.brinkster.com/criteriu/index.asp?page=wallpaper



Stig Holmberg (30-05-2002)
Kommentar
Fra : Stig Holmberg


Dato : 30-05-02 15:19

"Michael Kjeldsen" <mkjeldsen@NOSPAMmail1.stofanet.dk> wrote:

<body onload="this.document.refresh"> (eller lign.)


Hej Michael, tak for dit svar.

Desværre virker det ikke. Jeg fandt et Javascript der reloader siden med et
bestemt interval, men jeg vil kun reloade den en gang.

Mvh. Stig



Jesper Stocholm (30-05-2002)
Kommentar
Fra : Jesper Stocholm


Dato : 30-05-02 17:00

Stig Holmberg wrote in
news:3cf61f77$0$8965$edfadb0f@dspool01.news.tele.dk:

>
> Humlen i det hele er at brugerne af databasen kan finde på at klikke
> på tilbage-knappen i browseren og komme tilbage til den forældede
> side, det hjælper jo ikke dem at jeg ved jo godt at det skal man ikke
> gøre. Der er link mellem alle sider, men folk navigerer jo som de har
> lyst til - også med tilbage-knappen.
>
> Der er en Response.Redirect (der redirecter til den side fejlen opstår
> på) efter formular-behandlingen (den formular der sletter et emne) men
> der ligger stadig en forældet version af samme side i browserens
> cache.
>
> Jeg er fortvivlet, har brugt 2 dage på at løse dette problem.
>

det er fordi du forsøger at lave noget, der rent arkitekturmæssigt på web ikke kan
lade sig gøre. Iflg en eller anden RFC, så SKAL browseren hente en cachet side ved
klik på "Tilbage" i browseren. Dit ønske bliver dermed meget som at slås imod
vinmøller ... og derfor kan jeg ikke forestille mig, at du kan lave det du gerne vil
.... i hvert fald ikke hvis du vil have det til at virke i alle browsere.

Et response.redirect kan jeg ikke forstille mig vil være udslagsgivende, da den jo
ikke "henter" en side. Det eneste den gør er at fortælle browseren, at den side den
bad om er flyttet ... og hvis den nye side har været kaldt for et øjeblik siden, så
kan du risikere, at den hentes fra enten browserens cache ... eller fra en evt.
proxys cache.

Du bør derfor lave ALLE dine checks på serversiden (uden interaktion imellem browser
og eventuelle persistente cookies) ... evt kombineret med passende valg af session-
variable, der så kan holde styr på, hvor brugeren har været tidligere. Hvis du
absolut vil lave noget af det i sammenspil med klienten, så kan du prøve dette:

<%
option explicit
Dim strUrl ' as String
strURL = "newPage.asp?id=" & Server.URLEncode(now)
Response.Redirect(strURL)
%>

I princippet vil den side du henviser til så være ny, da id-værdien ændres for hvert
sekund. Derfor vil den ikke kunne (optimalt set) være hverken i en proxy-cache eller
en browser-cache.

:)
--
Jesper Stocholm
http://stocholm.dk
http://asp.stocholm.dk
Svar til gruppen og ikke til mig privat pr. email :|

Stig Holmberg (30-05-2002)
Kommentar
Fra : Stig Holmberg


Dato : 30-05-02 18:00


"Jesper Stocholm" <spam200205@stocholm.dk> wrote:
> det er fordi du forsøger at lave noget, der rent arkitekturmæssigt på web
ikke kan
> lade sig gøre. Iflg en eller anden RFC, så SKAL browseren hente en cachet
side ved
> klik på "Tilbage" i browseren. Dit ønske bliver dermed meget som at slås
imod
> vinmøller ... og derfor kan jeg ikke forestille mig, at du kan lave det du
gerne vil
> ... i hvert fald ikke hvis du vil have det til at virke i alle browsere.
>
> Et response.redirect kan jeg ikke forstille mig vil være udslagsgivende,
da den jo
> ikke "henter" en side. Det eneste den gør er at fortælle browseren, at den
side den
> bad om er flyttet ... og hvis den nye side har været kaldt for et øjeblik
siden, så
> kan du risikere, at den hentes fra enten browserens cache ... eller fra en
evt.
> proxys cache.
>
> Du bør derfor lave ALLE dine checks på serversiden (uden interaktion
imellem browser
> og eventuelle persistente cookies) ... evt kombineret med passende valg af
session-
> variable, der så kan holde styr på, hvor brugeren har været tidligere.
Hvis du
> absolut vil lave noget af det i sammenspil med klienten, så kan du prøve
dette:
>
> <%
> option explicit
> Dim strUrl ' as String
> strURL = "newPage.asp?id=" & Server.URLEncode(now)
> Response.Redirect(strURL)
> %>
>
> I princippet vil den side du henviser til så være ny, da id-værdien ændres
for hvert
> sekund. Derfor vil den ikke kunne (optimalt set) være hverken i en
proxy-cache eller
> en browser-cache.


Hej Jesper, tak for svaret

Du har sikkert inde på noget af det rigtige, der er mange "opskrifter" på
nettet men de handler alle om f.eks.:

<%
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1
%>

Og varianter over samme...

Jeg vil gerne lave mine checks server-side, men hvordan?

At tilføje URL´erne et tidsstempel lyder smart nok, skal alle links på alle
sider så opbygges på den måde eller kan man nøjes med nogle bestemte?

Måske jeg skulle gå over og købe en ASP-bog på 6-700 sider.

Mvh. Stig











Jesper Stocholm (30-05-2002)
Kommentar
Fra : Jesper Stocholm


Dato : 30-05-02 18:25

Stig Holmberg wrote in
news:3cf65a98$0$228$edfadb0f@dspool01.news.tele.dk:
[snip 53 liniers tekst]
> Du har sikkert inde på noget af det rigtige, der er mange "opskrifter"
> på nettet men de handler alle om f.eks.:
>
> <%
> Response.CacheControl = "no-cache"
> Response.AddHeader "Pragma", "no-cache"
> Response.Expires = -1
> %>
>
> Og varianter over samme...
>
> Jeg vil gerne lave mine checks server-side, men hvordan?
>

du kan jo sætte en session-variabel efter der er indsat i databasen.

con.Execute(strSQL)
session("HarIndsat") = 1

Denne kode udbygges så til

if not session("HarIndsat") = 1 then
   con.Execute(strSQL)
   session("HarIndsat") = 1
else
   response.write "Du kan ikke indsætte de samme data to gange"
end if

dette kan så gøres mere eller mindre avanceret ... :)


> At tilføje URL´erne et tidsstempel lyder smart nok, skal alle links på
> alle sider så opbygges på den måde eller kan man nøjes med nogle
> bestemte?

Principielt skal det være alle links ... men du kan jo nøjes med de
links, der leder hen til en side, der skal hentes friskt hver gang en
bruger kommer forbi.

Tricket med en "dynamisk" URL er i øvrigt også en god idé til at holde
crawlers væk. De går nemlig sjældent forbi sider med parametre i URL, da
det nemt kan blive en uendelig løkke - fx hvis man forvilder sig ind på
fx nytimes.com eller jp.dk . Jeg har på en af mine sider haft en valid
emailadresse stående i klartekst i et par år, og der er ikke kommet spam
på den endnu. De eneste links der er til siden er med opskriften jeg
nævnte tidligere.

:)

PS: du behøver ikke at sende hele det foregående indlæg med ... medtag
kun det du svarer direkte på.

--
Jesper Stocholm
http://stocholm.dk
http://asp.stocholm.dk
Svar til gruppen og ikke til mig privat pr. email :|

Kim Bach Petersen (30-05-2002)
Kommentar
Fra : Kim Bach Petersen


Dato : 30-05-02 18:17

> Humlen i det hele er at brugerne af databasen kan finde på at klikke på
> tilbage-knappen i browseren og komme tilbage til den forældede side, det
> hjælper jo ikke dem at jeg ved jo godt at det skal man ikke gøre. Der er
> link mellem alle sider, men folk navigerer jo som de har lyst til - også
med
> tilbage-knappen.

Dit scenario, som jeg forestiller mig det:

Brugeren få en liste og kan vælge at slette et element på denne liste. Selve
sletning foregår server-side. Ergo må du kunne bestemme, hvad brugeren skal
se bagefter. Her kan du så vise den ændrede liste straks (eller et tyeligt
link til den), så brugeren ikke fristes. Kombineret med 'no-cache' burde det
ikke umiddelbart give problemer.

Ellers kan jeg foreslå noget error-trapping, så databasefejlen oversættes
til noget en bruger kan forstå.

Kim



Kim Jensen (30-05-2002)
Kommentar
Fra : Kim Jensen


Dato : 30-05-02 16:12

> Man har mulighed for at tilføje, redigere, slette emner.
> Problemet er: Hvis man sletter et emne og derefter klikker på
> tilbage-knappen i browseren kan man komme til en side hvor det slettede
emne
> stadig er med.

1) Indsæt "response.expires=0" i toppen af din visningsside og din
form-processor-side (disse kan godt være i samme ASP-fil)
2) Når du har behandlet fx en "Slet"-kommando (i form-processor-delen), så
kald "response.redirect 'vis.asp'"

Din formbehandling kan sagtens foregå i toppen af din vis.asp fil, men husk
at kalde response.redirect af siden, hvis du har foretaget ændringer.

Den metode bruger jeg selv, og det virker fint med navigation vha.
browserens knapper.


mvh
Kim Jensen



Stig Holmberg (30-05-2002)
Kommentar
Fra : Stig Holmberg


Dato : 30-05-02 17:49


"Kim Jensen" <kj@jmt.dk> wrote:

1) Indsæt "response.expires=0" i toppen af din visningsside og din
form-processor-side (disse kan godt være i samme ASP-fil)
2) Når du har behandlet fx en "Slet"-kommando (i form-processor-delen), så
kald "response.redirect 'vis.asp'"

Din formbehandling kan sagtens foregå i toppen af din vis.asp fil, men husk
at kalde response.redirect af siden, hvis du har foretaget ændringer.

Den metode bruger jeg selv, og det virker fint med navigation vha.
browserens knapper.

mvh
Kim Jensen


Hej Kim

Det har jeg prøvet uden held, "response.expires=0" har ingen effekt
overhovedet.

Microsoft forslår nedenstående, og det virker heller ikke.

<%
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1
%>

Mvh. Stig



Søg
Reklame
Statistik
Spørgsmål : 177554
Tips : 31968
Nyheder : 719565
Indlæg : 6408852
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste