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