Avatar billede zer Nybegynder
24. juli 2002 - 13:36 Der er 31 kommentarer og
1 løsning

bruger online opdater

jeg har et system så når en bruger logger in skriver den 1 i en db og når de logger ud skriver den 0.
Men hvis de ikke logger ud så står der 1 hele tiden kan man ikke sætte en timeout eller noget lign. så hvis brugern ikke er aktiv inden for 5 min så skriver den 0 i dben??
Avatar billede medions Nybegynder
24. juli 2002 - 13:38 #1
Det er den forkerte måde at gøre det på! Du skal bruge globale variabler i stedet... -Her har du et eksempel til hvordan du kan gøre:

http://activedeveloper.dk/aspdigital/2001060701.asp

//>Rune
Avatar billede zer Nybegynder
24. juli 2002 - 13:40 #2
det skal ikke være antal online bruger men hvem er online!
fordi hvis en bruger er online viser den brugern under en tabel jeg har lavet på min hp hvis ikke så hvis den under en anden tabel
Avatar billede cygnet Praktikant
24. juli 2002 - 13:42 #3
zer > lyder som et cool script - hvis du får det til at fungerer giver du så et kopi :-D
Avatar billede zer Nybegynder
24. juli 2002 - 13:43 #4
hmm.. jeg kan da bytte det til at andet script vil jeg gætte på.
dette script er nemlig mit første hehe :-)
Avatar billede medions Nybegynder
24. juli 2002 - 13:46 #5
Kunne du så ikke give den enkelte bruger en unik ID, hvor så hans kolonne i tabellen ser således ud:

ID, Username, Password, Online
1  medions  hmm      1

og så online bliver så 0 når han ikke er online længere...

Når så han logger ind bliver der oprettet en session med hans ID, det ID kan du så tjekke på hver side han kommer ind på.. altså

If Session("id") = 1 Then
  If Session("online") = 1 Then
      'Han er online
  Else
      'Han er Offline
End If

//>Rune
Avatar billede zer Nybegynder
24. juli 2002 - 13:48 #6
hver bruger har sit eget id i db´en

kan du svare mig på 1 ting mere
hvad er forskellen på cookies og session
Avatar billede tmceu Praktikant
24. juli 2002 - 13:51 #7
Det sidstnævnte viser scriptet også.

Men det er noget af en påstand at kalde din fremgangsmåde forkert og den anden mere rigtig (eller mindre forkert). Begge fremgangsmåder er et kompromis mellem funktionalitet og performance og et forsøg på at kompensere for HTTP protokollens manglende state information.

Jeg kan specielt godt lidt (læs: sarkastisk bemærkning), at der argumenteres for fremgangsmåden i artiklen, ved at påstå at det giver bedre performance end ved at bruge en database.

1. Applikations variabler er kun egnet til få opdateringer og mange læsninger. Det er korrekt som der skrives i artiklen, at det er hurtigt at læse fra applikations variabler, fordi de ligger i memory. Men på et site med bare nogenlunde aktivitet, vil alle de opdateringer der vil blive foretaget sløve serveren ned med det samme.

2. Hver gang Application.Lock anvendes, sløver det også serveren ned, da den ikke kan lave andet imens.

3. Den funktion der håndterer dette skal kaldes fra "et eller andet sted". Dette kunne man eks. gøre fra forsiden af sit site, men dette vil give en masse overhead, da koden vil blive udført hver gang siden kaldes = endnu en ting der sløver serveren. Hvis folk går "bag om" forsiden, vil man ikke få alle brugere med på listen, med mindre man ligger kaldet på alle sider = endnu værre ift. performance.

Det eneste argument for ikke at bruge global.asa er, hvis man som det også står i artiklen, ikke har adgang til den.

En påstand bliver altså ikke rigtig, bare fordi den er publiceret på activedeveloper.dk - og hvis den gør, vil jeg publicere min :-)

Hvis du ikke er blevet "lokket" til at skifte fremgangsmåde, og stadig ønsker at fortsætte med din nuv. fremgangsmåde, sig til, så kan vi snakke om de problemer du har.
Avatar billede medions Nybegynder
24. juli 2002 - 13:52 #8
Cookies ligger sig som en fil på klientens bruger, hvor du selv kan definere hvor langt tid den skal ligge der. Hvor imod en Session er en Server Variabel, som ligger på serveren, og bliver slettet automatisk efter 20 min. hvis ikke sessionen er aktiv...

//>Rune
Avatar billede likedon Nybegynder
24. juli 2002 - 13:58 #9
Du kan lave en activeuser tabel, hvor i du gemmer dem som er online nu.
Hver gang man så kalder en side så skal den gå ind og opdatere denne tabel, dvs enten slette eller opdater en user med en tid(): noget i retning af følgende......du må selv ryde op i det da det bare er en kopi past:


'Intialise the ADO recordset object
Set rsActiveUsers = Server.CreateObject("ADODB.Recordset")

'Initialise the SQL variable with an SQL statement to get the active users details

    strSQL = "SELECT activeuser.* From activeuser WHERE ip='" & strIPAddress & "';"


'Set the cursor type property of the record set to Dynamic so we can navigate through the record set
rsActiveUsers.CursorType = 2
   
'Set the Lock Type for the records so that the record set is only locked when it is updated
rsActiveUsers.LockType = 3

'Query the database
rsActiveUsers.Open strSQL, strCon

'If there are no records for this user then add them to the datatbase
If rsActiveUsers.EOF Then
   
    'Initilse sql statement

        strSQL = "INSERT INTO activeuser (ip, user_id, os, browser, hide) VALUES ('" & strIPAddress & "','" & lngActiveUsersID & "','" & strOS  & "','" & strBrowserUserType & "','" & blnHideActiveUser & "');"


    'Write to database
    adoCon.Execute(strSQL)
   
'Else if there's records returned then update them
Else
    'Initilse sql statement

        strSQL = "UPDATE activeuser SET activeuser.user_id=" & lngActiveUsersID & ", activeuser.active=Now(), activeuser.hide=" & blnHideActiveUser & " WHERE ip='" & strIPAddress & "';"


    'Write to database
    adoCon.Execute(strSQL)   
End If

'Clean up old users

    strSQL = "DELETE FROM activeuser WHERE activeuser.active < Now() - 0.0070;"


'Detlete from database
adoCon.Execute(strSQL)

'Delete older second entries if the user has returned in under 10 minutes with a new IP
If lngActiveUsersID <> 2 Then

        strSQL = "DELETE FROM activeuser WHERE activeuser.user_id=" & lngActiveUsersID & " AND activeuser.ip <> '" & strIPAddress & "';"


    'Detlete from database
    adoCon.Execute(strSQL)
End If

'Requery the database to allow access to catch up
rsActiveUsers.Requery

'Close the recordset
rsActiveUsers.Close
Set rsActiveUsers = Nothing

'To save another database hit we can get the number of members online by taking the number of guest away from the total active users
intActiveMembers = intActiveUsers - intActiveGuests
Avatar billede zer Nybegynder
24. juli 2002 - 13:59 #10
fedt nok med session fordi så logger den jo auto. brugern af hvis han ikker er aktiv i 20 min right?
Avatar billede zer Nybegynder
24. juli 2002 - 14:00 #11
jeg kan se jeg stadi har en del at lære om asp :(
Avatar billede zer Nybegynder
24. juli 2002 - 14:02 #12
likedon < din forklaring virker fed nok men... jeg fatter ikke en skid da jeg ikke er så god til asp endnu :(
Avatar billede likedon Nybegynder
24. juli 2002 - 14:03 #13
ok
Avatar billede zer Nybegynder
24. juli 2002 - 14:04 #14
det er nemmer hvis jeg får filerne og så selv "leger" lidt med dem
Avatar billede zer Nybegynder
24. juli 2002 - 14:08 #15
er der ikke nogle der kan lave filerne og så sende dem til mig??

er der ikke andre måder at lave en check login fil på en at bruger sql = ´seletct og et eller andet?
Avatar billede medions Nybegynder
24. juli 2002 - 14:08 #16
For at slette din Session igen, så kan du skrive:

Sessions.Abandon så "logger du brugeren af"

//>Rune
Avatar billede tmceu Praktikant
24. juli 2002 - 14:08 #17
Du skal lige være opmærksom på specielt en ting vedr. sessioner til at styre online brugere. Hvis du kører ASP på IIS4 (som mange webhoteller stadig gør), er der et problem med Session_OnEnd som er den rutine i global.asa der kører, når en session dør.

Hvis en bruger ikke eksplicit logger ud med Session.Abandon, kører Session_OnEnd kun i 95-97% af situationerne. Det betyder at du stadig kan ende med aktive brugere på listen, der ikke reelt er aktive. Uanset om du anvender en database, tekstfil, applikations variabler.

Og så skal du også være opmærksom på, at brug af sessioner kræver at brugeren accepterer cookies, da der sendes en sessions cookie med alle requests/responses.
Avatar billede zer Nybegynder
24. juli 2002 - 14:11 #18
jeg bruger pws fra win 98
er det ikke nogen der kan vise hvordan global.asa filen skal se ud jeg fatter det ikke helt :(
Avatar billede zer Nybegynder
24. juli 2002 - 14:11 #19
2 sek skal lige lave et nyt spørgsmål
Avatar billede likedon Nybegynder
24. juli 2002 - 14:15 #20
Den her skulle være nogen lunde til smide direkte ind i dit asp-dokument...husk at ændre tabel-navne så de passer til dine har oversta kommentar til dansk....:) sig til hvis det er den vej du vil for ellers vil jeg ikke gøre mere ud af det.

<%
Dim rsActiveUsers    'RS to hold the active users
Dim strIPAddress     'Holds the uesrs IP address to keep track of em with
Dim dtmLoggedIn        'Holds the date/time the user logged in
Dim dtmLastActive    'Holds the date/time the user was last active
Dim strBrowserUserType    'Holds the users browser type
Dim intActiveUsers    'Holds the number of active users
Dim intActiveGuests    'Holds the number of active guests
Dim intActiveMembers    'Holds the number of logged in active members
Dim blnHideActiveUser     'Holds if the user wants to be shown in the active users list
Dim lngActiveUsersID    'Hols the active users ID number

'Henter ip-nummeret
strIPAddress = Request.ServerVariables("REMOTE_ADDR")

Set rsActiveUsers = Server.CreateObject("ADODB.Recordset")

    strSQL = "SELECT activeuser.* From activeuser WHERE ip='" & strIPAddress & "';"

rsActiveUsers.CursorType = 2
rsActiveUsers.LockType = 3

rsActiveUsers.Open strSQL, strCon

'Hvis der ikke er en i databasen der passer til ip så opret personen
If rsActiveUsers.EOF Then
   
    strSQL = "INSERT INTO activeuser (ip, user_id, os, hide) VALUES ('" & strIPAddress & "','" & lngActiveUsersID & "','" & strOS  & "','" & blnHideActiveUser & "');"

    adoCon.Execute(strSQL)
   
'Hvis der er så updatere
Else
    strSQL = "UPDATE activeuser SET activeuser.user_id=" & lngActiveUsersID & ", activeuser.active=Now(), activeuser.hide=" & blnHideActiveUser & " WHERE ip='" & strIPAddress & "';"

    adoCon.Execute(strSQL)   
End If

'Slet gamle bruger

    strSQL = "DELETE FROM activeuser WHERE activeuser.active < Now() - 0.0070;"

adoCon.Execute(strSQL)

rsActiveUsers.Requery
rsActiveUsers.Close
Set rsActiveUsers = Nothing
%>

<%
Set rsActiveUsers = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT activeuser.*, user.username FROM user, activeuser WHERE user.user_id = activeuser.user_id ORDER BY activeuser.active DESC;"

rsActiveUsers.Open strSQL, strCon

'Vis aktive brugere
Do While NOT rsActiveUsers.EOF

lngUserID = CLng(rsActiveUsers("user_id"))
strUsername = rsActiveUsers("username")

%>
<a href="java script:openWindow('pop_up_profile.asp?profile=<%=lngUserID%>','profile','toolbar=0,location=0,status=0,menubar=0,scrollbars=0,resizable=1,width=440,height=470')"><%=strUsername%></a>&nbsp;
<%
'Move to the next record in the database
rsActiveUsers.MoveNext
Loop%>
Avatar billede zer Nybegynder
24. juli 2002 - 14:17 #21
den vil jeg gerne bruge kan du ikke sende mig alle de filer der skal bruges til rhf@znoff.dk ?
Avatar billede tmceu Praktikant
24. juli 2002 - 14:18 #22
Er dette dit spørgsmål: http://www.eksperten.dk/spm/239081

Baseret på dine kommentarer ovenfor og ikke mindst dette spørgsmål: http://www.eksperten.dk/spm/239083 tyder meget på at du har 2 brugere. Jeg har aldrig tidligere anmeldt nogen som helst, men dette er simpelt hen for tydligt.
Avatar billede likedon Nybegynder
24. juli 2002 - 14:19 #23
hmm det er jo taget ud af en sammenhæng jeg skal da prøve at se om jeg lige kan bikse en fil+db sammen til dig
Avatar billede zer Nybegynder
24. juli 2002 - 14:22 #24
ok tak
Avatar billede zer Nybegynder
24. juli 2002 - 14:24 #25
sig når hvis du sender det :)
Avatar billede zer Nybegynder
24. juli 2002 - 14:42 #26
jeg skal til at gå om 5 min er du igang med at lave det eller gider du ikke?
Avatar billede likedon Nybegynder
24. juli 2002 - 15:13 #27
jeg har det nu
Avatar billede likedon Nybegynder
24. juli 2002 - 15:13 #28
men du er nok smuttet
Avatar billede likedon Nybegynder
24. juli 2002 - 15:22 #29
Avatar billede cygnet Praktikant
24. juli 2002 - 15:30 #30
likedon > he he - har du noget med Hinge Søstival at gøre :-D Var der ovre for nogle år siden fordi min eks kom fra Ans - det var sgu noget af en våd oplevelse, men fed stemning....

/cygnet
Avatar billede likedon Nybegynder
24. juli 2002 - 15:38 #31
jeg blev it-ansvarlig sammen med min bror for 1 år siden.. og ja vejret er sjælen med festivalen *snøft*
Avatar billede likedon Nybegynder
29. juli 2002 - 21:49 #32
zer>> har du fået noget til at virke??
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester