Just nu i M3-nätverket
Gå till innehåll

Sesion och Cookies


Admini

Rekommendera Poster

Hej

Visst är det så att Session skapas på servern och Cookies på klient, grovt förenklad?

 

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Jo, sessionen existerar och skapas på webbservern och en cookie på klienten. Dock så kräver sessioner även tillfälliga cookies på klienten för identifiering.

 

Länk till kommentar
Dela på andra webbplatser

Så en session likt det här:

Session([b]"sUser"[/b])=strAnvandare

skapar en session som heter sUser och har värdet från strAnvandare?

 

Vad händer om många användare samtidigt loggar in?

Då skapas det väl lika många sessioner?!

Men eftersom de heter likadant så kommer nästa session att ersätta föregående?

 

Lite förvirrande det härmed sessioner ....

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Det finns en Session("sUser") för varje unik session

(Objektorienterad jämförelse: se sUser som en lokal privat variabel för klassen Session, där varje användare äger en instans av klassen)

 

Länk till kommentar
Dela på andra webbplatser

OK, men skapas de på servern eller klienten?

Och hur läser jag av dem alla?

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Japp, de skapas på servern men en temporär cookie används på klienten som jag bara tror innehåller sessionsid, för att identifiera användarens session.

 

Att komma åt alla sessionsid kan du göra genom att lägga till sessionsid:t i Application-objektet vid varje ny session. Dock har jag aldrig fått Session_OnEnd att triggas när man stänger sin browser, vilket gör det svårt att plocka bort id:t från Application.

Om du däremot har en utloggningsfunktion där du nollställer sessionsobjektet så kan du ju plocka bort id:t då.

 

AnjunaMoon

____________________________________________________________

/* There is nothing more permanent than a temporary solution... */

 

[inlägget ändrat 2004-05-27 16:20:56 av Anjuna Moon]

Länk till kommentar
Dela på andra webbplatser

Hej igen

Om du däremot har en utloggningsfunktion där du nollställer sessionsobjektet ...

Ja det har jag , men jag vill även komma åt dem när de timas ut också!

För det är många som antingen glömmer logga ut manuellt eller bara stänger ner browsern och datorn.

Hur kommer jag åt dem?

Tack:)

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Ok, här är ett exempel för att komma åt alla sessionid. Skapa först filen Global.asa om du inte redan har en i webbroten och lägg följande kod i den:

<SCRIPT LANGUAGE=VBScript RUNAT=Server> 
[color="#0000ff"]Sub[/color] session_onstart
Application([color="#0000ff"]CStr[/color](Session.SessionId))=Session.SessionId
[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]
[color="#0000ff"]Sub[/color] Session_OnEnd
Application.Contents.Remove [color="#0000ff"]CStr[/color](Session.SessionId)
[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]
</SCRIPT>

 

Du kommer sedan åt alla sessionid med:

[color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] id in Application.Contents
response.write id & [b]"<br>"[/b]
[color="#0000ff"]Next[/color]

 

Vill du hellre spara olika sessionsvariabler kan du istället ändra till något sånt här:

[color="#0000ff"]Sub[/color] session_onstart
Application([color="#0000ff"]CStr[/color](Session.SessionId))=Session([b]"Variabel1"[/b]) & [b]"|"[/b] & Session([b]"Variabel2"[/b])

[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

 

och hämta ut variablerna med:

[color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] data in Application.Contents
arrData=[color="#0000ff"]Split[/color](data,[b]"|"[/b])
[color="#0000ff"]For[/color] i=0 to [color="#0000ff"]UBound[/color](arrData)
	response.write [b]"Variabel="[/b] & (i+1) & [b]"="[/b] & arrData(i) & [b]", "[/b]
[color="#0000ff"]Next[/color]
[color="#0000ff"]Next[/color]

 

TILLÄGG: Tack till Erik och Magnus! Färgkodning fungerar ju ypperligt!

 

AnjunaMoon

____________________________________________________________

/* There is nothing more permanent than a temporary solution... */

[inlägget ändrat 2004-05-27 18:29:51 av Anjuna Moon][inlägget ändrat 2004-05-27 18:29:51 av Anjuna Moon]

 

Länk till kommentar
Dela på andra webbplatser

Jag har hört att session_on_end inte fungerar som det ska.

Men jag ska strax testa din kod...

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon
Jag har hört att session_on_end inte fungerar som det ska

 

Jag vet, den är inte att lita på dessvärre. Dock så kördes den när mina sessioner passerat timeout-gränsen (men inte när jag använder Session.Abandon eller om jag stänger webbläsaren)

 

AnjunaMoon

____________________________________________________________

/* There is nothing more permanent than a temporary solution... */

 

Länk till kommentar
Dela på andra webbplatser

Jag testade men jag får bara det här:

80956459
80956487
Variabel=1=80956459, Variabel=1=80956487, 

Vad är dessa siffror för nånting och var är MINA sessioner?

Tack

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon
Vad är dessa siffror för nånting och var är MINA sessioner?

 

Vet inte riktigt vad du menar med "mina" sessioner. Vad är det du egentligen vill kunna göra? Mitt exempel visade bara på hur du kan spara värden från olika personers sessionsvariabler globalt.

 

AnjunaMoon

____________________________________________________________

/* There is nothing more permanent than a temporary solution... */

 

Länk till kommentar
Dela på andra webbplatser

Jaha,

Nej jag trodde jag skulle kunna fånga värdet i var och en av sessioner.

Men jag ser bara en massa siffror, jag vet tydligen jette lite om sessioner:(

 

Jag vill bara se vilka har stängt ner sin browser och eller vilka har timat ut[inlägget ändrat 2004-05-27 23:31:52 av Admini][inlägget ändrat 2004-05-27 23:31:52 av Admini]

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Jag skrev lite fel i loopen, det var därför du fick ut fel data. Säg att du har en variabel Session("UserName") och du vill komma åt alla aktiva personers variabel. Använd då följande:

 

[color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] data in Application.Contents
arrData=[color="#0000ff"]Split[/color](Application(data),[b]"|"[/b])
[color="#0000ff"]For[/color] i=0 to [color="#0000ff"]UBound[/color](arrData)
	response.write arrData(i) & [b]", "[/b]
[color="#0000ff"]Next[/color]
[color="#0000ff"]Next[/color]

 

för att skriva ut namnen.

 

I Global.asa måste du då spara just denna variabel:

	Application([color="#0000ff"]CStr[/color](Session.SessionId))=Session([b]"UserName"[/b])

 

Länk till kommentar
Dela på andra webbplatser

Ska jag ha filen på något speciellt ställe?

global.asa ligger i roten självklart, men den andra?

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon
men den andra

 

Nej, den koden kan du lägga i vilken fil som helst, typ i den fil du vill komma åt aktiva användares variabler ifrån.

 

Länk till kommentar
Dela på andra webbplatser

Nu får jag fortfarande siffror men bara 2

80957189
80957399

 

Hur kan jag komma åt värdena också?

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Hur ser din kod ut nu (båda filer) och vad heter värdena du vill ha ut?

 

Länk till kommentar
Dela på andra webbplatser

global.asa

<SCRIPT LANGUAGE=VBScript RUNAT=Server> 
[color="#0000ff"]Sub[/color] session_onstart
Application([color="#0000ff"]CStr[/color](Session.SessionId))=Session([b]"anvandarsession"[/b])
[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]
[color="#0000ff"]Sub[/color] Session_OnEnd
Application.Contents.Remove [color="#0000ff"]CStr[/color](Session.SessionId)
[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]
</SCRIPT>

 

test_asa.asp

[MÄRK]<%[/MÄRK]
[color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] id in Application.Contents
response.write id & [b]"<br>"[/b]
[color="#0000ff"]Next[/color]

[color="#0000ff"]Sub[/color] session_onstart
Application([color="#0000ff"]CStr[/color](Session.SessionId))=Session([b]"Variabel1"[/b]) & [b]"|"[/b] & Session([b]"Variabel2"[/b])
[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

[color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] data in Application.Contents
arrData=[color="#0000ff"]Split[/color](Application(data),[b]"|"[/b])
[color="#0000ff"]For[/color] i=0 to [color="#0000ff"]UBound[/color](arrData)
	response.write arrData(i) & [b]", "[/b]
[color="#0000ff"]Next[/color]
[color="#0000ff"]Next[/color]
[MÄRK]%>[/MÄRK]

[inlägget ändrat 2004-05-28 00:17:42 av Admini]

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Ändra test_asa.asp till

 

[MÄRK]<%[/MÄRK]
[color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] data in Application.Contents
arrData=[color="#0000ff"]Split[/color](Application(data),[b]"|"[/b])
[color="#0000ff"]For[/color] i=0 to [color="#0000ff"]UBound[/color](arrData)
response.write arrData(i) & [b]", "[/b]
[color="#0000ff"]Next[/color]
[color="#0000ff"]Next[/color]
[MÄRK]%>[/MÄRK]

 

Detta kommer skriva ut det du satt Session("anvandarsession") till för varje användare. Om du inte satt den variabeln någonstans kommer den naturligtvis vara en tom sträng för alla.

 

Länk till kommentar
Dela på andra webbplatser

Men den koden finns ju där!

Eller menar du att jag tar bort all annan kod?

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Precis!

 

AnjunaMoon

____________________________________________________________

/* There is nothing more permanent than a temporary solution... */

 

Länk till kommentar
Dela på andra webbplatser

Denna kod använder jag:

[MÄRK]<%[/MÄRK]
[color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] data in Application.Contents
arrData=[color="#0000ff"]Split[/color](Application(data),[b]"|"[/b])
[color="#0000ff"]For[/color] i=0 to [color="#0000ff"]UBound[/color](arrData)
	response.write arrData(i) & [b]", "[/b]
[color="#0000ff"]Next[/color]
[color="#0000ff"]Next[/color]
Response.Write [b]"anvandarSession= "[/b]& Session([b]"anvandarSession"[/b])&[b]"<br>"[/b]
[MÄRK]%>[/MÄRK]

 

Och response.write visar att det finns en användare men inte din kod.

[inlägget ändrat 2004-05-28 00:42:27 av Admini][inlägget ändrat 2004-05-28 00:42:27 av Admini]

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Det beror på att du inte satt Session("anvandarSession") förrän efter Session_OnStart har körts och alltså har bara en tom sträng sparats undan. Gör så att du istället klistrar in denna kod efter du satt variabeln.

 

Dvs, i den fil där du sätter:

Session([b]"anvandarSession"[/b])=[b]"Något namn"[/b]

 

sätter du på raden efter:

Application([color="#0000ff"]CStr[/color](Session.SessionId))=Session([b]"anvandarSession"[/b])

 

AnjunaMoon

____________________________________________________________

/* There is nothing more permanent than a temporary solution... */

 

Länk till kommentar
Dela på andra webbplatser

Hej igen

Nu upptäckte jag en hel del fel i mina övriga koder som försvårar vidare arbete.

Jag får laga dem imorgon och återkommer till dig igen:)

Tack så mycket fördin hjälp ikväll!

Vi hörs imorgon

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...