webForumDet fria alternativet

Online/Offline script!

ASP

15 svar · 498 visningar · startad av magnusfernstrom

Medlem sedan mars 20033 686 inlägg
Frågan#1

Hejsan!
Jag har ett litet problöm med ett sript som skall ändra värdet i en databas då någon loggar in.

<%
Set db = Server.CreateObject("ADODB.Connection")
db.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath ("db.mdb")
SQL = "UPDATE anv SET online = '1' WHERE anv = '" & Session("anv") & "'"
Set rs = db.Execute(SQL)
SQL = "SELECT * FROM anv"
Set rs = db.Execute(SQL)
%>

När man loggar in så startar en session som lagrar användarnamnet, men det funkar inte. Den verkar inte känna att
det är just "den" personen den skall ändra värdet på, eftersom den ändrar värdet 0 till 1 på alla i databasen.

Någon som vet?

Mvh Magnus Fernström

Medlem sedan nov. 20017 144 inlägg
#2

1. finns det något värde i session("anv")?
2. Vad är det för datatyper i kulumnerna?
3. Heter både tabellen och en kolumn "anv"?

Medlem sedan mars 20033 686 inlägg
#3

1.Ja, jag har prövat att skriva ut sessionens värde, och man får då fram namnet man angav vid inloggningssidan.
2. Text
3. Ja

Medlem sedan mars 20033 686 inlägg
#4

Det ordnade sig!
Men nu har ännu ett problem dykt upp.
När man är inne så har man alltså värdet 1 och är online.
När man skall logga ut trycker man på en länk och skickas sedan
vidare till sidan som rensar sessionen och sätter tillbaks värdet till 0 i databasen. Allt är frid och fröjd än så länge Men när man har varit inaktiv en viss tid så vill jag att man skall loggas ut automatiskt. Detta är heller inte något problem förutom att värdet då inte byts tillbaks till noll.
Eftersom Session.TimeOut rensar så följer inte något värde med. Och koden som sätter tillbaks värdet till 0 ser ut så här:

<%
Set db = Server.CreateObject("ADODB.Connection")
db.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath ("db.mdb")
SQL = "UPDATE members SET online = '0' WHERE anv = '" & Session("anv") & "'"
Set rs = db.Execute(SQL)
%>
<%
Session("inloggad") = "False"
Response.write "Utloggad!"
Session.Abandon
%>

Den behövar alltså användarnamnet som den fick när man loggades in. Men detta går ju inte eftersom det är borta.
Sedan vill jag att den skall logga ut sig själv när man stänger webbläsarfönstet. Hur fixas detta? Alltså hur fixar jag hur sessionen rensas och värdet sätts tillbaks på 0 när man stänger ner webbläsarfönster så att INGA av mina sidor längre är öppna?

Hoppas nån begriper :D

Mvh Magnus Fernström

Medlem sedan aug. 20012 349 inlägg
#5

Det går inte att få det att hända automagiskt.

Föreslår istället att du sätter en tids stämpel i databasen varje gång din användare surfar till en sida. Sen gör du även en koll på varje sida och ändrar i databasen online = 0 för de användare som inte har en tidsstämpel som är äldre än t ex 20 minuter.

Medlem sedan nov. 20017 144 inlägg
#6

Använd global.asa

Medlem sedan mars 20033 686 inlägg
#7

Men om man har session timeout, rensas inte sessionen efter den tid man angivit även om besökaren lämnat sidan?
Så att det försvinner efter en stund i alla fall.

Medlem sedan juni 200032 967 inlägg
#8

magnusfernstrom skrev:

Men om man har session timeout, rensas inte sessionen efter den tid man angivit även om besökaren lämnat sidan?
Så att det försvinner efter en stund i alla fall.

Jo, sessionsvariablerna dör, ja.

Medlem sedan mars 20033 686 inlägg
#9

Ok, kan man inte göra Något för att få den att känna av att just den sessionen har dött då?

Medlem sedan juni 200032 967 inlägg
#10

Jo, man kan prova sökfunktionen... :P

Medlem sedan mars 20033 686 inlägg
#11

Haha som om jag inte gjort det ;)
Men oftast så hittar jag endast obegripliga svar!
Länk till något som passar detta?

Medlem sedan mars 20033 686 inlägg
#12

Jag har nu sökt men hittar inget lämpligt!
Något tips/länk/kod?

Medlem sedan aug. 20012 349 inlägg
#13

finns en funktion som heter Session_OnEnd som man kan ha i global asa. Den funktionen körs när sessionen dör.
Den är känd för att ibland vara lite buggig. Förhoppningsis är den inte det på iis6 nuförtiden, men jag vet inte. Någon mer kompetent kan kanske tala om det för oss.

Min personliga tanke är att inte lite på session_OnEnd utan använda sig av en databas istället, men det är ju mer komplicerat.

Medlem sedan mars 20033 686 inlägg
#14

Jo, men hur skall man gå tillväga för att göra det då?
Databasen alltså!

Medlem sedan feb. 200112 078 inlägg
#15

Jag tänkte att denna tråd kunde vara av intresse om du beslutar dig för att använda global.asa och Session_onEnd för ändamålet.

Medlem sedan mars 20033 686 inlägg
#16

Okej, tack OveRRidE, men global.asa fungerar inte på brinkster :(

men tack så hemskt mycket i alla fall.

mvh Magnus Fernström

259 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
132 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
116 ms — ändringar (db)