Avatar billede likedon Nybegynder
16. april 2004 - 22:43 Der er 36 kommentarer og
4 løsninger

Tælle aktive bruger fra flere domains

Jeg har et domain køre php+mysql og et der køre asp+mssql
nu skal jeg så have vist på begge hvormange aktive bruger der er på de 2 domains tilsammen. altså hvis der er 30 online på det ene og 50 på det andet skal den på begge skive 80. Hvordan klarer jeg den nemmest? Gode ideer
Avatar billede ellebaek Nybegynder
16. april 2004 - 22:45 #1
Jeg tror ikke det kan lade sig gøre...
Hvis dine domæner ligger på forskellige platforme har du ikke direkte adgang til de forskellige informationer.
Avatar billede likedon Nybegynder
16. april 2004 - 22:47 #2
men jeg kunne vel lave et eller andet med databaserne, de kan jo tilgås i begge sprog og fra begge servere ikke?
Avatar billede likedon Nybegynder
16. april 2004 - 22:47 #3
eller noget med noget javascript alla chart?
Avatar billede -master-d- Nybegynder
16. april 2004 - 22:50 #4
Du laver et script som tæller op, enten i php eller asp, så indsættes denne kode hvor tælleren skal være.

<script src="http://ditdomain.dk/filnavn.asp" type="txt/javascript"></script>

Din tæller er så den fil som hedder filnavn.asp, denne fil skal så udskrive værdien af antal brugere.

Jeg kan lige lave et hurtigt eksempel senere, hvis du har problemer med det selv.
Avatar billede -master-d- Nybegynder
16. april 2004 - 22:52 #5
nemlig, det er samme princip som chart benytter sig af, blot at det i deres tilfælde er en database adgang som kombineres med et billedkomponent, men den tager vi en anden god gang :)
Avatar billede likedon Nybegynder
16. april 2004 - 22:56 #6
men risikere jeg ikke på den måde at hvis den ene server ned så hænger den anden server også fordi den ikke kan få fat på dataerne?
Avatar billede -master-d- Nybegynder
16. april 2004 - 23:02 #7
jo, det gør du, men det vil den jo under alle omstændigheder..

Når man kommunikerer mellem to servere, vil den ene være påvirket af den anden og omvendt.. ergo, går den ene ned, vil kommunikation mellem de to servere hænge som en død tråd.

Jeg tror din eneste udvej er at kombinere server-side med client-side, det kan måske endda også vise sig at være en fordel i et worst case scenario (hvis den ene server går ned), men det ved jeg ikke helt præcist..
Avatar billede likedon Nybegynder
16. april 2004 - 23:09 #8
godt har fået det til at virke så skal jeg bare lige have fundet ud af hvordan jeg connecter til mssql fra php *s* smid et svar.
Avatar billede -master-d- Nybegynder
16. april 2004 - 23:18 #9
okay, godt... jeg smider et svar så.. du bestemmer fuldstændig selv om jeg skal have alle pointene eftersom jeg ikke rigtig kom med nogen form for kode eller andet end ord..
Avatar billede -master-d- Nybegynder
16. april 2004 - 23:19 #10
et svar :D
Avatar billede punnishment Nybegynder
16. april 2004 - 23:19 #11
hmm det er vel slet ikke nødvendigt med en database, jeg vil tværtimod påstå det er dumt at bruge en database for at lagre antal online brugere....

det nemmeste er at du på begge server laver en asp/php fil med en javascript variabel der indeholder det antal brugere der er i den pågældende server. Herefter skal du bare have fat i det tal fra den anden server og plusse dem sammen (det samme skal du også gøre fra den anden server)... Nemt og enkelt
Avatar billede likedon Nybegynder
16. april 2004 - 23:21 #12
kan jeg overføre sessionsid fra en server til en server på den måde, med javascript?
Avatar billede likedon Nybegynder
16. april 2004 - 23:23 #13
>>punnishment
lyder smart hvordan ? kan du det i hovedet?
Avatar billede punnishment Nybegynder
16. april 2004 - 23:25 #14
fx. laver du en fil i asp serveren der ser således ud:
serverASP/counter.asp
----------------------
<%
response.write "var online_users_ASP = " & Application("onlineusers") & ";"
%>


her efter skal du bare hente den data fra din php server, fx.

serverPHP/onlinebrugere.html
<hmtl>
<script src="serverASP/counter.asp"></script>
<script language="JavaScript">
var online_users_PHP = <?=echo(php tæller funktinen)?>;
var total_online_users = parseInt(online_users_ASP) + parseInt(online_users_PHP);
document.write(total_online_users);
</script>
Du kunne også bruge layers(div) med innerHTML
</html>
Avatar billede punnishment Nybegynder
16. april 2004 - 23:28 #15
Du kunne også bruge layers(div) med innerHTML = En anden måde at udskrive dataen på.
Du får også lige et eksempel på det

serverPHP/onlinebrugere.html
<hmtl>
<script src="serverASP/counter.asp"></script>
<script language="JavaScript">
var online_users_PHP = <?=echo(php tæller funktinen)?>;
var total_online_users = parseInt(online_users_ASP) + parseInt(online_users_PHP);
document.getElementById("onlinebrugere").innerHTML = total_online_users;
</script>
Lige nu er der <b><span id="onlinebrugere"></span></b> online brugere på begge mine servere..!
</html>
Avatar billede -master-d- Nybegynder
16. april 2004 - 23:31 #16
Det er rigtigt nok punnishment og jeg ville aldrig selv gøre det, men du slipper ikke bare afsted med en enkelt linie som der..

Du er nødt til at lave en funktion til det, med mindre du gør brug af global.asa.
Avatar billede -master-d- Nybegynder
16. april 2004 - 23:34 #17
Spørgsmålet er så bare om man kan bruge applikations over to domæner ???

Jeg ved ikke om man bliver talt fra applikation, når man forlader siden igen, når det er på et andet domæne.. derfor er en databaseløsning måske optimal.
Avatar billede likedon Nybegynder
16. april 2004 - 23:35 #18
nu skal jeg så lige se om jeg kan få min global.asa il at virke før jeg kommer videre *hehe*
Avatar billede punnishment Nybegynder
16. april 2004 - 23:39 #19
nej du er helt galt på den <master-d>...
Her er min ide:
Du laver en tælle-funktioner på hvert af disse servere, uafhængig af hinnanden.!
Her efter poster du den værdi fra fx. serverASP over i en javascript variabel (javascript variablen bliver altså dynamisk!).

I serverPHP henter du denne javascript variabel, plusser det tal i den variabel, med den tælle_funktions_variabel i serverPHP og gemmer det som en variabel: Og nu har du det samlede online brugere tal fra begge servere!
Avatar billede -master-d- Nybegynder
16. april 2004 - 23:39 #20
Det gør du bare.. skriv hvis du har behov for hjælp.
Avatar billede likedon Nybegynder
16. april 2004 - 23:39 #21
så lang så godt  nu står der så 1 på to af mine asp domains forskellige servere så skal jeg bare have lagt den sammen, så tager jeg lige php med bagefter
Avatar billede punnishment Nybegynder
16. april 2004 - 23:41 #22
likedon: du behøver ikke at lave selve tælle funktionen selv.! Der findes utallelig mange gratis på nettet.
kig fx her:
www.activedeveloper.dk
www.asp.dk
Avatar billede -master-d- Nybegynder
16. april 2004 - 23:42 #23
punnishment >> Man lærer ikke så meget af at kopiere andres løsninger, bare en lille sidebemærkning.. ;-)
Avatar billede -master-d- Nybegynder
16. april 2004 - 23:45 #24
Nå, men jeg smutter nu.. jeg vil også selv have noget ud af natten, så jeg sætter mig til at udvikle på et af mine egne projekter. Så likedon, du må spørge punnishment hvis der er behov for hjælp, lader til at han har styr på det..

Sov godt :o)
Avatar billede likedon Nybegynder
16. april 2004 - 23:48 #25
jo der er mange på nettet, men hvor mange går ud på at tælle fra forskellige servere, har i øvrigt et safe-mode problem på php-serveren *øv*

har du forstand på den også?

sov godt master
Avatar billede likedon Nybegynder
17. april 2004 - 00:29 #26
har et problem, tror det er min asa der skal laves noget i, den server jeg hvor jeg henter variblerne ind med tæller op på fjernserveren ved f5 se her:
http://www.powertolift.com/00/default.asp

http://www.maximilian.dk/mx/taeller/

hvad går galt? min asa ser sådan her ud:
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnStart
    ' starter fra 0
    Application("ActiveUsers") = 0
End Sub

Sub Session_OnStart
    ' så er timeout'en på en session 20 minutter - kan ændres...
    Session.Timeout = 1
    Session("Start") = Now
    Application.Lock
        Application("ActiveUsers") = Application("ActiveUsers") + 1
    Application.UnLock
End Sub

Sub Session_OnEnd
    Application.Lock
        Application("ActiveUsers") = Application("ActiveUsers") - 1
    Application.UnLock
End Sub
</SCRIPT>
Avatar billede punnishment Nybegynder
17. april 2004 - 01:43 #27
har ikke forstand på php.
Jeg får ikke den fejl som du snakker om: Tælleren tæller ikke ekstra gange når jeg reloader (F5)!

Du kan læse mere om global.asa her inde:
http://activedeveloper.dk/artikler/default.asp?mode=showchapter&chapter=30

manges erfaring siger at det ikke er godt at bruge global.asa til tællefunktion, da session_OnEnd ikke altid bliver afviklet - men du kan læse mere om det i det ovenstående link
Avatar billede likedon Nybegynder
17. april 2004 - 08:56 #28
siger du at den ikke tæller op når du tykker F5 på det her link http://www.powertolift.com/00/default.asp
Avatar billede -master-d- Nybegynder
17. april 2004 - 10:21 #29
Så er jeg her igen..

På min bliver den bare ved med at tælle op på den eksterne server.
Avatar billede likedon Nybegynder
17. april 2004 - 12:35 #30
nemlig, men er det ikke fordi at denne:
<script src="serverASP/counter.asp"></script>

får en ny session hver gang den bliver kaldt?
Avatar billede -master-d- Nybegynder
17. april 2004 - 13:54 #31
jo.
Avatar billede likedon Nybegynder
17. april 2004 - 14:17 #32
så duer den metode jo ikke *øv* så er der vel kun databasen tilbage
Avatar billede -master-d- Nybegynder
17. april 2004 - 18:24 #33
ja, eller en tekstfil. Jeg kan ikke lige komme op med en løsning som kører uden det, da sessions og applikations ikke kører over flere domæner samtidigt..

Jeg prøver lige at se om jeg ikke kan hitte på noget smart.
Avatar billede likedon Nybegynder
17. april 2004 - 19:10 #34
jeg lader den lige ligge weekenden over og holder fri indtil da.
Avatar billede punnishment Nybegynder
17. april 2004 - 21:14 #35
min tæller i hvertfald ikke hvergang jeg refresher.
Men det lyder rigtigt nok at pga. du kalder en side fra den anden server, opfatter den anden server det kald som et nyt besøgende: Det gør den fordi global.asa holder styr over ALLE filer i hele serveren (smart, men ikke brugbart i vores tilfælde!)

Løsningen på dette problem er simpelthen at droppe global.asa, og lave din egen taellefunktion.asp som du inkludere øverst i ALLE dine sider på den pågældende server.

Jeg vil klart anbefale denne løsning frem for database-løsningen.!
Avatar billede punnishment Nybegynder
17. april 2004 - 21:22 #36
her en artikel der giver lidt hjælp på vejen, til at udvikle counter uden brug af global.asa
Du skal dog selv forbedre den.
Oprydning er den vigtigste funktion der mangler i den artikel

http://www.netcoders.dk/articles.asp?mode=show_article&article_id=93&tech_id=1
Avatar billede -master-d- Nybegynder
17. april 2004 - 21:56 #37
punnishment >> du modsiger dig selv, ved at bruge applikations på den ene server vil den stadig tælle hver gang funktionen bliver kaldt fra server2..

Der skal en indviklet funktion til at finde ud af om kaldet kommer fra den ene eller den anden server...
Avatar billede likedon Nybegynder
18. april 2004 - 16:16 #38
kan man ikke lave en exclude i global.asa på ip-adressen, den kender jeg jo på begge servere.
Avatar billede punnishment Nybegynder
18. april 2004 - 16:38 #39
Her er lige en tilføjelse til det seneste foreslag:
Du skal selvfølgelig ikke inkludere den taellefunktion.asp fil i den fil med javascript variablet.!

når du så henter den variabel fra den anden server - bliver det kald ikke opfattet som en bruger!
Avatar billede likedon Nybegynder
27. april 2004 - 12:22 #40
jeg har droppet at tælle op fra 2 server på samme tid, så lukker sp i deler ok
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