webForumDet fria alternativet

Online/Offline script!

15 svar · 498 visningar · startad av magnusfernstrom

magnusfernstromMedlem sedan mars 20033 686 inlägg
#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

Jesper TMedlem 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"?

magnusfernstromMedlem 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

magnusfernstromMedlem 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

mrblondeMedlem 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.

Jesper TMedlem sedan nov. 20017 144 inlägg
#6

Använd global.asa

magnusfernstromMedlem 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.

@ndersMedlem sedan juni 200032 969 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.

magnusfernstromMedlem 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å?

@ndersMedlem sedan juni 200032 969 inlägg
#10

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

magnusfernstromMedlem 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?

magnusfernstromMedlem sedan mars 20033 686 inlägg
#12

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

mrblondeMedlem 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.

magnusfernstromMedlem sedan mars 20033 686 inlägg
#14

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

OveRRidEMedlem 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.

magnusfernstromMedlem 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

131 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)