webForumDet fria alternativet

Visa vilka "medlemmar" som är online!

ASPur ASP

27 svar · 917 visningar · startad av jimpa

jimpaMedlem sedan jan. 2001361 inlägg
#1

Hej

Söker efter ett redan färdigt script som visar vilka som är Online
Ungefär som här på webforum.
Är det någon som möjligen vet om det går att hitta det gratis någonstans?

Mvh Jimpa

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Du kan ju börja med att söka i detta forum.

jimpaMedlem sedan jan. 2001361 inlägg
#3

Nope :)

Kan inte finna ett redan färdigt script som visar vilka som online i detta forum någon annan som vet?

Mvh Jimpa

QuidMedlem sedan juni 20006 025 inlägg
#4

Jag tror knappast du kommera tt hitta något färdigt script som passar just till din sida, det är ju trots allt rätt många faktorer som måste stämma.

Men en lösning är ju att spara ett datum i database varje gång användaren gör något, och sen på "vilka är online"-sidan plocka ut dem vars tid inträffade för mindre än ca. 15 minuter sen. Det är ju dock en kraftkrävande metod.

UnConedMedlem sedan jan. 2002307 inlägg
#5

Du kan ha en kolumn i en databas som heter t.ex OnlineStatus.
Sen varje gång de loggar in uppdaterar du den till t.ex 'Ja'
Och när de loggar du uppdaterar du den igen till t.ex 'Nej'
Sen kollar du bara vilka som är online genom att skriva ut från databasen.
Sql = "Select * From Databaskolumn Where OnlineStatus = 'Ja'"

jimpaMedlem sedan jan. 2001361 inlägg
#6

Jag hittade ett script Här
Men får det inte att fungera riktigt då inte namnet på den inloggade skrivs. Utan det registraras som "Gäst"

Kanske någon kan hjälpa mig att hitta felet
Den feta texten i koden har jag ändrat gentemot orginalet som du finner i länken ovan.
Börjar med global.asa

[FONT=courier new]
<Object Runat="Server" Scope="application" ID="dOnlineUsers" ProgID="Scripting.Dictionary"></Object>

<SCRIPT LANGUAGE=VBScript RUNAT=Server>

sub Application_OnStart
    application("ServerStart") = now
end sub

[B]' Vad Betyder det Här !!!!!

function Decrypt(sText)
    'Replace with your own decrypt ;)
    Decrypt = sText
end function    

function adZero(sText)
    'Adds zeros to the beginning
    if isNull(sText) then exit function
    adZero = string(3 - len(sText), "0") & sText
end function

[/B]

Sub Session_OnStart

    'Session_OnStart is automatically called by the ASP Interpreter
    'when a new session starts. (Probably a new visitor)

    'TimeOut value determines the period in minutes when 
    'the session is assumed to be abandoned

    Session.TimeOut = 10

    'Get the current active users list
    sActiveUsersList = application("ActiveUsersList")
    
    'Get the new user name from the cookie
    'sNewUserName = Decrypt(request.cookies("devUserName"))
[B]  'Session MM_Username innehåller namnet på användaren
    sNewUserName = Decrypt(Session("MM_Username"))[/B]
   

    'If the visitor doesn't have a registered username, assign Guest(n) label
    if sNewUserName = "" then sNewUserName = "Gäst-" & AdZero(CInt(application("Visitors")))
    
    'Initial action time
    sLastActionTime = Time
    
    'User info consists of user name, last action time, and the page viewed
    sUserInfo = sNewUserName & "<|>" & sLastActionTime & "<|>" & sLastPageViewed

    'Add this user to our collection with SessionID being the key
    '(See the top of this file to see how dOnlineUsers object is initiated)
    dOnlineUsers.Add Session.SessionID, sUserInfo
    
    'Lock the application variable and update the contents
    application.lock
    'The number of active users
    application("ActiveUsers") = application("ActiveUsers") + 1
    'The number of visitors since last application reset
    application("Visitors") = application("Visitors") + 1
    
    'If the date is different than the previously stored date,
    'it means we passed midnight, so reset our "today" counters
    if application("TodaysDate") <> Date() then
        application("PageViewsToday") = 0
        application("VisitorsToday") = 0
    end if
    application("VisitorsToday") = application("VisitorsToday") + 1
    'Store the date
    application("TodaysDate") = Date()
    'Unlock and go
    application.unlock
    
End Sub

Sub Session_OnEnd
    'Session_OnEnd is automatically called by the ASP Interpreter
    'when the specified TimeOut period has passed after user's last action

    on error resume next

    'Remove this session from our collection
    dOnlineUsers.Remove Session.SessionID
    
    'And update the application variables
    application.lock
    application("ActiveUsers") = application("ActiveUsers") - 1
    application.unlock

End Sub
</SCRIPT>

[/FONT]

Sedan "onlineusers.asp" inkl. i alla ASP-sidor

<%
[B] Vad betyder detta!!!!!!
function Decrypt(sText)
    'Replace with your own decrypt ;)
    Decrypt = sText
end function    
[/B]

    application.lock
    application("PageViews") = application("PageViews") + 1
    if application("TodaysDate") <> Date() then
        application("PageViewsToday") = 0
        application("VisitorsToday") = 0
    end if
    application("PageViewsToday") = application("PageViewsToday") + 1
    application("TodaysDate") = Date()
    application.unlock
    
   ' if session("devUserName") = "" then

        'session("devFullName") = Decrypt(request.cookies("devFullName"))
        
[B]'Session MM_Username innehåller namnet på användaren
        session("devFullName") = Decrypt(Session("MM_Username"))
        [/B]
    end if

    session("PageViewed2") = session("PageViewed1")
    session("PageViewed1") = session("PageViewed0")
    session("PageViewed0") = request.ServerVariables("script_name")
    
    sUserInfo = dOnlineUsers.Item(Session.SessionID)
    aUserInfo = split(sUserInfo, "<|>")
    aUserInfo(1) = Time()
    aUserInfo(2) = request.ServerVariables("script_name")
    sUserInfo = aUserInfo(0) & "<|>" & aUserInfo(1) & "<|>" & aUserInfo(2)
    dOnlineUsers.Item(Session.SessionID) = sUserInfo  
%>

Till sist sidan som skriver ut "whoson.asp"

<p>
Who is Online
</p>

    <%
    on error resume next
    response.write "<table cellpadding=""2"" cellspacing=""1"" border=""0"" width=""100%"">"        
    response.write "<tr><td></td><td><strong>Who</strong></td><td><strong>When</strong></td><td><strong>Where</strong></td></tr>"
    aSessions = dOnlineUsers.Keys
    for iUser = 0 to dOnlineUsers.Count - 1
        sKey = aSessions(iUser)
        sUserInfo = dOnlineUsers.Item(sKey)
        aUserInfo = split(sUserInfo, "<|>")
        
        sUserName = aUserInfo(0)
        sLastActionTime = aUserInfo(1)
        sLastPageViewed = aUserInfo(2)
        
        if sUserInfo <> "" then
        iUsrCount = iUsrCount + 1
        response.write "<tr><td align=""right"">" & iUsrCount & ".</td><td> " & sUserName & "</td><td>" & sLastActionTime & "</td>"
        response.write "<td>" & sLastPageViewed & "</td></tr>"
        end if
        
    next
    response.write "</table>"
    [B]
    'Provar att skriva ut namnet Funkar
    response.write Session("MM_Username") & "<BR>"
    'Funkar inte
    response.write sUserName
    [/B]
    %>

<br><br>

Mvh Jimpa

nisslassMedlem sedan nov. 2001348 inlägg
#7

Decrypt är till för att manipulera med användarnamnet, vilket du inte behöver bry dig om.

adZero är som det låter AD Zero. Lägg till 0:a.
Lägger till 0:or innan numret på den anslutna användaren om denne ansluter som Gäst.

if session("devUserName") = "" then
        session("devUserName") = Decrypt(request.cookies("devUserName"))
        session("devFullName") = Decrypt(request.cookies("devFullName"))
    end if

verkar finnas utan anledning så testa byta det till:

If Not Session("MM_Username") = "" then
NyttNick = Session("MM_Username")
Else
NyttNick = "Gäst"
End If

och efter det, byt

sUserInfo = aUserInfo(0) & "<|>" & aUserInfo(1) & "<|>" & aUserInfo(2)

i onlineusers.asp till

sUserInfo = NyttNick & "<|>" & aUserInfo(1) & "<|>" & aUserInfo(2)

I Global.asa kan raden

sNewUserName = Decrypt(Session("MM_Username"))

ersättas med:

sNewUserName = "Gäst"

eftersom sessionen MM_Username antagligen inte är definierad precis när man går in på sidan.

Det fungerar för mig iaf.

Denniz PoPMedlem sedan aug. 2002207 inlägg
#8

UnConed skrev:

Du kan ha en kolumn i en databas som heter t.ex OnlineStatus.
Sen varje gång de loggar in uppdaterar du den till t.ex 'Ja'
Och när de loggar du uppdaterar du den igen till t.ex 'Nej'
Sen kollar du bara vilka som är online genom att skriva ut från databasen.
Sql = "Select * From Databaskolumn Where OnlineStatus = 'Ja'"

Det kommer inte riktigt att fungera eftersom alla inte loggar ur helt utan bara stänger ner webläsaren. Därför är det bättre att ha t.ex. en OnlineStatus-kolumn och uppdatera den varje gång användare laddar en ny sida. Sedan kontrollera vilka som gjorde något på sidan för ca 10 min sedan.
Som sagt, den kräver mycket. Men så länge användare bara stänger webläsaren (istället för att trycka på någon "logga ut"-länk först) så är det det bästa sättet att lösa det på.

jimpaMedlem sedan jan. 2001361 inlägg
#9

Tackar nisslass :birp

Gjorde som du skrev o nu funkar det ju alla tiders!!

Mvh Jimpa

MacceMedlem sedan apr. 2001425 inlägg
#10

Om du använder en application-variabel istället för db så slipper du prata så mycket med databasen, vilket ger bättre prestanda !

nisslassMedlem sedan nov. 2001348 inlägg
#11

Det är det scriptet gör som vi snackar om längre upp...

limponMedlem sedan sep. 2001175 inlägg
#12

Jag har testat den här koden.
Får hela tiden felmeddelandet.

Körningsfel i Microsoft VBScript error '800a01a8'

Objekt krävs.: 'dOnlineUsers'

/_onlineusers.asp, line 26

nisslassMedlem sedan nov. 2001348 inlägg
#13

Har du fixat det du ska i global.asa och stödjer ditt webhotell denna fil?

limponMedlem sedan sep. 2001175 inlägg
#14

Ja det gör det jag kopierade först hela jimpas kod, bytte ut till det du sa.

Men får det där felet.

limponMedlem sedan sep. 2001175 inlägg
#15

Nu tog jag koden direkt från länken jimpa angav.
Funkar lika dåligt.

limponMedlem sedan sep. 2001175 inlägg
#16

det är den här raden jag får fel på.

    sUserInfo = dOnlineUsers.Item(Session.SessionID)

i _onlineusers.asp

Är väldigt ovan såna här script.
Håller mest på med databaser.

ampyMedlem sedan feb. 20011 498 inlägg
#17

Jag får också:

Objekt krävs.: ''

på denna rad:

sUserInfo = dOnlineUsers.Item(Session.SessionID)

Vad kan det bero på?

nisslassMedlem sedan nov. 2001348 inlägg
#18

Det verkar som om ni har problem med global.asa.
Läses filen rätt och har ni pillat in rätt kod i filen?
dOnlineUsers initieras i global.asa...

ampyMedlem sedan feb. 20011 498 inlägg
#19

Jag har lagt global.asa i wwwroot:en. Så här ser den ut:

Global.asa:

<Object Runat="Server" Scope="application" ID="dOnlineUsers" ProgID="Scripting.Dictionary"></Object>

<SCRIPT LANGUAGE=VBScript RUNAT=Server>

	sub Application_OnStart

    		application("ServerStart") = now

	end sub

		function Decrypt(sText)
    		'Replace with your own decrypt ;)
    		Decrypt = sText
		end function    

		function adZero(sText)
    		'Adds zeros to the beginning
    		if isNull(sText) then exit function
    		adZero = string(5 - len(sText), "0") & sText
		end function

	Sub Session_OnStart

    		'Session_OnStart is automatically called by the ASP Interpreter
    		'when a new session starts. (Probably a new visitor)

    		'TimeOut value determines the period in minutes when 
    		'the session is assumed to be abandoned

    		Session.TimeOut = 20

    		'Get the current active users list
    		sActiveUsersList = application("ActiveUsersList")
    
    		'Get the new user name from the cookie
    		sNewUserName = "Gäst"
    
    		'If the visitor doesn't have a registered username, assign Guest(n) label
    		if sNewUserName = "" then sNewUserName = "Guest-" & AdZero(CInt(application("Visitors")))
    
    		'Initial action time
    		sLastActionTime = Time
    
    		'User info consists of user name, last action time, and the page viewed
    		sUserInfo = sNewUserName & "<|>" & sLastActionTime & "<|>" & sLastPageViewed

    		'Add this user to our collection with SessionID being the key
    		'(See the top of this file to see how dOnlineUsers object is initiated)
    		dOnlineUsers.Add Session.SessionID, sUserInfo
    
    		'Lock the application variable and update the contents
    		application.lock
    		'The number of active users
    		application("ActiveUsers") = application("ActiveUsers") + 1
    		'The number of visitors since last application reset
    		application("Visitors") = application("Visitors") + 1
    
    		'If the date is different than the previously stored date,
    		'it means we passed midnight, so reset our "today" counters
    		if application("TodaysDate") <> Date() then
        	application("PageViewsToday") = 0
        	application("VisitorsToday") = 0
    		end if
    		application("VisitorsToday") = application("VisitorsToday") + 1
    		'Store the date
    		application("TodaysDate") = Date()
    		'Unlock and go
    		application.unlock
    
	End Sub

	Sub Session_OnEnd
    	'Session_OnEnd is automatically called by the ASP Interpreter
    	'when the specified TimeOut period has passed after user's last action

    	on error resume next

    	'Remove this session from our collection
    	dOnlineUsers.Remove Session.SessionID
    
    	'And update the application variables
    	application.lock
    	application("ActiveUsers") = application("ActiveUsers") - 1
    	application.unlock

End Sub
</SCRIPT>

Så här ser koden ut som inkluderas på varje sida:

   	application.lock
    	application("PageViews") = application("PageViews") + 1
    	if application("TodaysDate") <> Date() then
        application("PageViewsToday") = 0
        application("VisitorsToday") = 0
    	end if
    	application("PageViewsToday") = application("PageViewsToday") + 1
    	application("TodaysDate") = Date()
    	application.unlock
    
	If Not Session("username") = "" then
	NyttNick = Session("username")
	Else
	NyttNick = "Gäst"
	End If

    	session("PageViewed2") = session("PageViewed1")
    	session("PageViewed1") = session("PageViewed0")
    	session("PageViewed0") = request.ServerVariables("script_name")
    
    	sUserInfo = dOnlineUsers.Item(Session.SessionID)
    	aUserInfo = split(sUserInfo, "<|>")
    	aUserInfo(1) = Time()
    	aUserInfo(2) = request.ServerVariables("script_name")
    	sUserInfo = NyttNick & "<|>" & aUserInfo(1) & "<|>" & aUserInfo(2)
    	dOnlineUsers.Item(Session.SessionID) = sUserInfo

Jag kan inte se någon feländring jag har gjort, kan ni det?

Sidan där jag skriver ut användarna behöver jag ju inte visa för den orsakar knappast felet. För övrigt funkar den sidan bra.

nisslassMedlem sedan nov. 2001348 inlägg
#20

Ni kör vanliga MS ASP va? Inte chillisoft eller liknande?
Har ni gjort exakt som jag längre upp så borde det ju fungera.. *hmm*

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