|
| Sletning af flere sessionsvar fejler Fra : Thomas Makro |
Dato : 29-07-03 23:55 |
|
Jeg forsøger at slette alle sessionsvariabler i en logout fil, men det
virker ikke. Jeg tester med 4 sessionsvar. Første gang logoutfilen
kaldes, ser den kun to af sessionsvariablerne, som den sletter.
Derefter trykker jeg refresh, og den ser nu endnu en sessionsvar, som
den sletter. Jeg refresher igen, og den sidste af de 4 sessionsvar
slettes.
Jeg ønsker at slette samtlige sessionsvariabler uden at skulle
refreshe siden flere gange. Hvordan?
Den relevante del af koden er:
dim Item
For Each Item in Session.Contents
If IsObject( Session.Contents(Item)) Then
Response.Write Item & " is an object som nu skal
slettes...<BR>"
Session.Contents.Remove(Item)
Else
Response.Write Item & "=" & Session.Contents(Item) & " som nu
slettes....<BR>"
Session.Contents.Remove(Item)
End If
Next
Antal = Session.Contents.Count
Response.write "Der er nu " & Antal & " sessioner tilbage. Der bør
ikke være en eneste.<br>"
--
M.v.h.
Thomas Makro
| |
Jørn Andersen (30-07-2003)
| Kommentar Fra : Jørn Andersen |
Dato : 30-07-03 02:09 |
|
On Wed, 30 Jul 2003 00:54:37 +0200, Thomas Makro
<tmakro@fjernesvip.cybercity.dk> wrote:
>Jeg ønsker at slette samtlige sessionsvariabler uden at skulle
>refreshe siden flere gange. Hvordan?
<snip kode>
Er det ikke nemmere med:
Session.Abandon
- ?
--
Jørn Andersen,
Brønshøj
| |
Thomas Makro (30-07-2003)
| Kommentar Fra : Thomas Makro |
Dato : 30-07-03 10:10 |
|
> Er det ikke nemmere med:
> Session.Abandon
> - ?
Jo meget
Det er skam prøvet, men den kan jeg ikke bruge, da den ikke sletter alle
sessions.
Det ville være endnu nemmere hvis serveren det skal køre på havde været en
win2000, men det er en NT4, så den kender ikke Session.Contents.RemoveAll()
hvilket ellers er den nemmeste måde at droppe samtlige sessiosn på en gang.
--
Thomas
| |
Chrisser (30-07-2003)
| Kommentar Fra : Chrisser |
Dato : 30-07-03 10:17 |
|
Thomas Makro wrote:
>> Er det ikke nemmere med:
>> Session.Abandon
>> - ?
>
> Jo meget
> Det er skam prøvet, men den kan jeg ikke bruge, da den ikke sletter
> alle sessions.
Øh - jo det gør den da, men ikke før din side er fuldt eksekveret, prøv at
brug den og redirect derefter til en anden side, så skulle de altså meget
gerne være væk
Mvh
Chrisser
| |
Thomas Makro (30-07-2003)
| Kommentar Fra : Thomas Makro |
Dato : 30-07-03 11:24 |
|
"Chrisser" <cbj@egdatainform.dk> wrote in message
news:bg82dn$kvq$1@sunsite.dk...
> Thomas Makro wrote:
> Øh - jo det gør den da, men ikke før din side er fuldt eksekveret, prøv at
> brug den og redirect derefter til en anden side, så skulle de altså meget
> gerne være væk
Ja, hvis man bruger een session. Man jeg har flere session variabler kørende
på en gang, og disse skal alle sammen droppes på en gang. Sagen er, at der i
et frameset kører flere sider med blandede sessionvariabler. Nogle af disse
sessionvariabler forsvinder, men nogle gange ikke dem alle. Ret
besynderligt, hvilket formentlig skyldes at det var forskelligt hvilke
sessions den droppede hver gang jeg testede.
--
Thomas
| |
Jørn Andersen (30-07-2003)
| Kommentar Fra : Jørn Andersen |
Dato : 30-07-03 10:36 |
|
On Wed, 30 Jul 2003 11:10:03 +0200, "Thomas Makro"
<tmakro@fjernesvip.cybercity.dk> wrote:
>> Er det ikke nemmere med:
>> Session.Abandon
>> - ?
>
>Jo meget
>Det er skam prøvet, men den kan jeg ikke bruge, da den ikke sletter alle
>sessions.
Det har jeg ikke hørt om før - er det noget specielt for NT4?
Jeg var ret sikker på, at Session.Abandon dræbte Session'en og dermed
alle Session-variable. Kan du beskrive en situation, hvor det *ikke*
sker?
--
Jørn Andersen,
Brønshøj
| |
Thomas Makro (30-07-2003)
| Kommentar Fra : Thomas Makro |
Dato : 30-07-03 12:05 |
|
"Jørn Andersen" <jorn@jorna.dk> wrote in message
news:8b4fivogo4mu02thk94h10o590ac1jbfma@4ax.com...
> Det har jeg ikke hørt om før - er det noget specielt for NT4?
Som nævnt klarer Session.Contents.RemoveAll() den lille opgave, men den er
først implementeret i ASP version 3, og virker derfor lokalt, men ikke når
jeg uploader til webserveren, som er en NT4.
Se evt.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iisref/htm/ref_vbom_sesomsra.asp.
> Jeg var ret sikker på, at Session.Abandon dræbte Session'en og dermed
> alle Session-variable. Kan du beskrive en situation, hvor det *ikke*
> sker?
Ja, se mit svar til Chrisser.
Siden I begge er så sikre på at Session.Abandon dræber alle sessions,
begynder jeg at spekulere på om det kan være (endnu) en fejl på det webhotel
der bruges. Jeg har nemlig kun set denne periodiske fejl på webhotellet,
ikke lokalt. Jeg har rapporteret en anden fejl til webhotellets support, som
nu, 3 uger efter, endnu ikke er rettet. Så det skulle ikke undre mig om det
er der problemet er...
Anyway, hvad er så forskellen på Session.Contents.RemoveAll() og
Session.Abandon ?
Se evt. http://www.w3schools.com/asp/asp_sessions.asp.
--
Mvh Thomas
| |
Chrisser (30-07-2003)
| Kommentar Fra : Chrisser |
Dato : 30-07-03 12:32 |
|
Thomas Makro wrote:
> Anyway, hvad er så forskellen på Session.Contents.RemoveAll() og
> Session.Abandon ?
Jag mener at forskellen ligger i at Session.Abandon frigør serverens
ressourcer med det samme, den nedlægger simpelthen sessionenerne, hvorimod
Session.Contents.RemoveAll() blot tømmer dem.
Chrisser
| |
Jørn Andersen (30-07-2003)
| Kommentar Fra : Jørn Andersen |
Dato : 30-07-03 13:57 |
|
On Wed, 30 Jul 2003 13:31:46 +0200, "Chrisser" <cbj@egdatainform.dk>
wrote:
>Thomas Makro wrote:
>> Anyway, hvad er så forskellen på Session.Contents.RemoveAll() og
>> Session.Abandon ?
>
>Jag mener at forskellen ligger i at Session.Abandon frigør serverens
>ressourcer med det samme, den nedlægger simpelthen sessionenerne, hvorimod
>Session.Contents.RemoveAll() blot tømmer dem.
Det er vel mere rigtigt at sige, at Session.Contents.RemoveAll()
fjerner alle Session-variable, men opretholder selve Session'en.
Session.Abandon dræber Session'en.
Når du siger "nedlægger simpelthen sessionenerne", så er det egentlig
forkert: Der er kun én Session pr. "bruger", men der kan være mange
Session-variable.
MS siger:
"The RemoveAll method deletes all items that have been added to the
Session object's Contents collection."
Om Session.ABandon:
"This method destroys a Session object and releases its resources."
--
Jørn Andersen,
Brønshøj
| |
Chrisser (30-07-2003)
| Kommentar Fra : Chrisser |
Dato : 30-07-03 14:06 |
|
Jørn Andersen wrote:
> Det er vel mere rigtigt at sige, at Session.Contents.RemoveAll()
> fjerner alle Session-variable, men opretholder selve Session'en.
> Session.Abandon dræber Session'en.
>
> Når du siger "nedlægger simpelthen sessionenerne", så er det
> egentlig forkert: Der er kun én Session pr. "bruger", men der kan
> være mange Session-variable.
Fuldstændig korrekt.
Det er rart at der er nogle der kan udtrykke sig klart når jeg nu selv ikke
kan
Chrisser
| |
Jørn Andersen (30-07-2003)
| Kommentar Fra : Jørn Andersen |
Dato : 30-07-03 19:22 |
|
On Wed, 30 Jul 2003 15:05:53 +0200, "Chrisser" <cbj@egdatainform.dk>
wrote:
>Det er rart at der er nogle der kan udtrykke sig klart når jeg nu selv ikke
>kan
Nå, det plejer da elers at gå meget godt
--
Jørn Andersen,
Brønshøj
| |
Chrisser (31-07-2003)
| Kommentar Fra : Chrisser |
Dato : 31-07-03 07:02 |
|
Jørn Andersen wrote:
>> Det er rart at der er nogle der kan udtrykke sig klart når jeg nu
>> selv ikke kan
>
> Nå, det plejer da elers at gå meget godt
Nu er jeg glad igen
Chrisser
| |
Jens Gyldenkærne Cla~ (31-07-2003)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 31-07-03 22:37 |
|
Thomas Makro skrev:
[Chrisser, om virkningen af session.abandon]
>> Øh - jo det gør den da, men ikke før din side er fuldt
>> eksekveret, prøv at brug den og redirect derefter til en
>> anden side, så skulle de altså meget gerne være væk
> Ja, hvis man bruger een session.
En bruger (eller rettere, en browser) har én session ad gangen.
Denne session kan så godt indeholde flere sessionvariabler.
> Man jeg har flere session variabler kørende på en gang, og disse
> skal alle sammen droppes på en gang.
Det gøres også med Session.Abandon.
> Sagen er, at der i et frameset kører flere
> sider med blandede sessionvariabler.
Det er muligvis dit frameset der driller. Normalt benytter man et
redirect efter session.abandon - på den måde tvinger man browseren
væk fra siden med variablerne. Men response.redirect kan kun virke
på én af dine frames - derfor kan det tænkes at du i de resterende
stadig har vinduer med referencer til sessionvariable. De skulle
stadig gerne være døde på serveren, men hvis dele af framesettet
ikke reloades kan der ligge session-information i browseren.
Det er også muligt at session ikke bliver nedlagt korrekt når der
stadig er åbne vinduer (frames) der ikke har kaldt session.Abandon.
For at slippe for problemet (hvis det er frames der er årsagen til
det), skal du lave en log ud-side der kaldes i browserens
hovedvindue (target="_top"). Den kan så redirecte til et frameset
hvis det er ønskværdigt - bare den ikke kaldes i et frameset.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
Thomas Makro (01-08-2003)
| Kommentar Fra : Thomas Makro |
Dato : 01-08-03 15:34 |
|
On Thu, 31 Jul 2003 23:37:10 +0200, Jens Gyldenkærne Clausen
<jens@gyros.invalid> wrote:
>For at slippe for problemet (hvis det er frames der er årsagen til
>det), skal du lave en log ud-side der kaldes i browserens
>hovedvindue (target="_top"). Den kan så redirecte til et frameset
>hvis det er ønskværdigt - bare den ikke kaldes i et frameset.
Hvis frames var synderen, skulle problemet være der hver gang, og det
er jo ikke tilfældet. Derfor hælder jeg mest mod at webserveren er den
skyldige. Men det er da nogle ret interessante udlægninger du kommer
med, dem vil jeg have i baghovedet næste gang jeg støder på fejlen.
Mange tak.
--
M.v.h.
Thomas Makro
| |
|
|