Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  21 2120
Hei, jeg har søkt i mange timer for å finne en script som kan telle timer en bruker har vært logget inn. Men jeg kan kanskje ikke søkeordene derfor jeg finner ikke. Så vet noen hvordan jeg skal begynne med? Helst lage selv fordi det er noe spesifikasjoner jeg vil putte inn eller en script som kan endres/tilpasses.

Det jeg vil er følgende:

Når en bruker logger seg inn vil da telleren telle i hvor mange timer han/hun har vært inne inntil han/hun logger seg ut.

Når for eks. brukern har vært inne i 5 timer vil da plussere de 5 timene med timene brukern har vært inne før.

Og lage en top liste hvor listen setter opp bruker etter mest besøkte eller aktiv bruker, og får karakter fra 0 - 5 for eks.



Takk på forhond!
NOOOOOOOOOOOOOOOOOO-
robhol's Avatar
Jeg tror nok du kan bruke cookies til dette.. men husk at du ikke er garantert at brukeren logger seg aktivt ut, mange bare krysser ut vinduet eller lukker tabben de viser sida di i.
Trådstarter
74 0
mmm.. Ja sant det, men andre måter å bruke? Kanskje bare når han er innlogget og vinduet er oppe
z0p
uʍop ǝpısdn
z0p's Avatar
Jeg tror nok grunnen til at du ikke har funnet noe er fordi det ikke finnes noen gode måter å gjøre dette på. Siden dette må skje serverside har man liten kontroll over hva brukeren faktisk foretar seg.

Eneste jeg kan komme på i farten som vil gi et nogen lunde greit resultat må være at det opprettes en session variabel med klokkeslett når brukeren logger inn. Hver gang en side oppdateres eller brukeren går inn på en ny side, sjekkes klokkeslettet opp mot variabelen, og tiden som har gått legges til brukerdatabasen.
Man har her en svakhet der brukere kan gå glipp av tid om man bruker tid på en side, og går ut uten å besøke en ny side eller oppdaterer nettleseren.
Den positive siden ved dette er at dette vil gi et mer reelt bilde på hvor aktivt brukeren er. Andre metoder kan gi et mindre reelt bilde da de vi ta med dødtid der brukeren har siden i nettleseren uten å være aktiv.
Det er nok mye lettere med cookies, skjekke klokkeslettet når man logger inn, starter en cookie som har "levetid" på 1 minutt, så for hver gang du er inne på siden, skjekker den opp mot sessionen, og hvis den er satt, så lager du en ny, og naturligvis setter inn i DBen. Kanskje ikke så bra forklart, men den skal funke ganske greit.
z0p
uʍop ǝpısdn
z0p's Avatar
Kan du prøve å forklare dette litt bedre Hater_mordin?
m0b
m0b's Avatar
DonorAdministrator
Altså, dersom du baserer innloggingen din på session så er det egentlig helt greit, så driter du i å blande inn cookies i dette. En session er en innloggingssesjon, det vil si at dersom brukeren lukker nettleseren sin og starter en ny - er det dermed en ny sesjon og brukeren må logge inn på nytt. Helt fint.

Når brukeren logger seg inn, oppretter du en session-variabel som lagrer timestamp (http://no2.php.net/time) på når han ble innlogget. På hver side som du ønsker å vise hvor lenge brukeren har vært innlogget sjekker du delta timestamp. Enkelt.

Forøvrig, når jeg ser på trådhistorikken din, hadde det ikke vært bedre for deg om du faktisk lærte deg php? Eller, om du ikke klarer dette - heller finner deg en annen hobby? Skru på bil eller moped. Jeg er ærlig talt drittlei trådene dine hvor du skal ha alle andre til å gjøre absolutt alt for deg.
Trådstarter
74 0
Du budre lære deg litt PHP kanskje? For om du fakstisk var ekspert ville du hjelpe. Jeg er ærlig talt jeg og dritt lei av dine komentarer! For du sier sånt hver gang jeg spørr noe. Lær deg PHP, les bok, finn deg annen hobby..
Zed's dead, baby!
afen's Avatar
Du ser ikke logikken i å lese litt om PHP før du begynner å knote?
m0b
m0b's Avatar
DonorAdministrator
PMen jeg fikk fra deg kan jeg like gjerne svare på her, den alene er grunnlag nok for meg å banne ræva di vekk fra forumet.

For det første kan jeg opplyse deg om at ("mine tråd" som du så fint putter det) trådene du oppretter har du ikke noe som helst eierskap til, og jeg står med min fulle rett ved å stenge eller slette de. Dette har du også sagt deg eni i ved å godta vårt regelverk.

TROR du virkelig at dette forumet er din personlige jævla php-helpdesk? En kjapp oppsummering av tråd-terroren din kan vise nærliggende 20 tråder med grunnleggende spørsmål om PHP, hvor mer eller mindre alle enkelt kunne vært løst med et kjapt google søk, eller 2 minutter logisk tankegang. Det virker til at du verken er i stand til å google på et fornuftig vis, eller tenke. Dette kan jeg fint begrunne med de 20 trådene dine, og at du siden august 2007 virker like overrasket i det PHP er småsur for den brutale voldtekten og overgrepene du foretar deg. Fy på deg.

Den PMen du sendte meg var virkelig å skyte seg selv i foten. Er det virkelig så rart at du får disse svarene fra meg i trådene dine, tror du? Jeg er mer eller mindre sikker på at veldig mange her tenker nøyaktig det samme som meg.

Hvorvidt jeg kan eller ikke kan PHP tror jeg egentlig ikke jeg trenger bevise noe som helst. Om jeg er ekspert eller ikke skal jeg ikke si noe om. Jeg er som regel svært behjelpelig når det kommer til spørsmål om programmering eller utvikling, men det forutsetter at brukeren faktisk tar lærdom av det jeg skriver, og ikke kommer med et tilsvarende tåpelig og grunnleggende spørsmål neste gang. Det vitner om lite takknemlighet og innsikt i det som har med programmering å gjøre. Slikt tar jeg som en personlig hån mot både meg og mitt yrke, og jeg blir svært lite blid.

Jeg forbyr deg derfor å opprette en eneste til tråd om PHP eller webutvikling hvor nivået på det du spør etter er totalt grunnleggende og selvsagt.
Jeg vet hvordan man kan gjøre det skikkelig lett!
Man liksom bare setter en tid når di logger inn, med time funksjon saken, slik:
$tid1 = time();
Så bare tar du slik at når man logger ut så tar du denne
$tid2 = time();
Også bare tar du
$tid3 = $tid1 - $tid2;
Og da lagrer du $tid3 i databasen, også blir det den tiden du har hvert logga inn!
z0p
uʍop ǝpısdn
z0p's Avatar
Det fungerer såfremt alle brukerne logger seg ut via en funksjon, og ikke bare avslutter nettleseren Alcazalamander. Ergo er det ikke en veldig god løsning.
Da bare ber man alle medlemene om å logge ut, hvis ikke får de ikke lov til å spille.
m0b
m0b's Avatar
DonorAdministrator
Tror du virkelig brukere er så enkle å styre?
Brukere er som telefoner, ringer du så svarer noen!
Med andre ord får du en lang telefonregning, men alle logger ut.
z0p
uʍop ǝpısdn
z0p's Avatar
Da foreslår jeg at du logger ut herfra mens leken er god.
Når du lager websider må du tenke at brukerne er onde tyrkiske hackere som vil rape siden så hardt de greier, for å spre virus og annen faenskap.

Det nytter ikke å fortelle slike brukere "du må huske å logge ut."
Sist endret av Ozma; 20. januar 2008 kl. 21:45.
Okay, ny plan, når man logger inn settes en
$tid = time();
for hver side som åpnes lages en ny
$tid2 = time();
Så trekkes $ tid fra $tid2, og tallet som er igjen pluses inn i databasen. Så ser man tallet, som da er antallet sekunder som har gått, og det blir supert!
Bedre, ikke engang de tyrkiske hackerne overlister den!
Trigonoceps occipita
vidarlo's Avatar
Donor
Det artige med lister er at uansett type, vil alltid en del prøve å havne på toppen. Garantert. Det vil sei at 95.2% vil ikkje logge ut, nettopp for å konkurere om toppen på lista, og du vil ha topp 100 som har kliss identisk tid

Ei God Løysing(TM) er å bruke javascript som seier ifrå kor ein er, og når javascript sist registrerte input til browservinduet. Eg kan knapt javascript, men eg antar at det skulle la seg gjere ettersom ein kan hente ut scrollposition og slikt ting. Då kan du få rimeleg nøyaktig tidsbruk, men tilgjengjeld får du ei kompleks løysing som tar litt tid å lage.

Eit anna alternativ er å embedde en transparent png en plass, og utputte den ved hjelp av php, 1 byte om gangen. Det vil ta tid, og når brukaren navigerer vekk frå sida vil loadinga slutte, og du veit dermed kor lenge han var på sida. Ikkje veldig elegant, og vil knekke hopping i tekst m.m. for m.a firefox.

Alt i alt trur eg beste er ei javascriptløysing, kombinert med serverside prosessering. Alternativet er å sette snittid på 5 minutt per lenke...

Alcazalamander, der berører du et sentralt element i HTTP: den er tilstandsløs, og du veit dermed veldig lite om klienten din. Cookies er en hack for å prøve å gi protokollen tilstand.

Men å omgå den du har der er da trivielt; while true; do curl -C /tmp/foo http://example.com/foo.php ; sleep 120; done
Sist endret av vidarlo; 20. januar 2008 kl. 21:55.
z0p
uʍop ǝpısdn
z0p's Avatar
Alcazalamander: Om du leser tråden før du svarer, så hadde du sett at det er dette som blir foreslått.

Vidarlo: ei javascriptløsning er vel litt for lett å misbruke. Om du ikke har noen gode forslag til måter å gjøre det på?
Om man skal gå inn på såpass avanserte løsninger er vel java tingen å bruke?
Sist endret av z0p; 20. januar 2008 kl. 21:59.
Jeg begynner å bli ganske god i PHP da, snart er jeg den nye guruen på n-ff, og jeg skal svare på alle spørsmål! Haha, men jeg tror min ide virker, lagre tid fra side til side i databasen.

Kode

 <SCRIPT language="JavaScript" type="text/javascript">
 
<!--  

 var onHours = " ";

 var onMinutes = " ";

 var onSeconds = " ";

 var offHours = 0;

 var offMinutes = 0;

 var offSeconds = 0;

 var logSeconds = 0;

 var logMinutes = 0;

 var logHours = 0;

 var OnTimeValue = " ";

 var OffTimeValue = " ";

 var PageTimeValue = " ";

 // Back to previous page.

 function WinOpen() 

    {

    getLogoffTime();

    }

 // Loads HTML page to full window for View Source.

 function WinOpen1() 

    {

    alert('\nPage will load to full screen.\n\nUse View/Document Source from menu bar to view source.\n\nClose new window to return to this page. ');

    window.open("js-timer.htm","DisplayWindow","menubar=yes,scrollbars=yes");

    window.open("js-timer.htm","DisplayWindow","menubar=yes,scrollbars=yes");   

    }


 // Captures logon time.

 function getLogonTime()

    {

    var now = new Date();

    // Used to display logon time.

    var ampm = (now.getHours() >= 12) ? " P.M." : " A.M."

    var Hours = now.getHours();

          Hours = ((Hours > 12) ? Hours - 12 : Hours);

    var Minutes = ((now.getMinutes() < 10) ? ":0" : ":") + now.getMinutes();

    var Seconds = ((now.getSeconds() < 10) ? ":0" : ":") + now.getSeconds();

    // String to display log-on time.

    OnTimeValue =(" "

        + Hours

        + Minutes

        + Seconds

        + " "

        + ampm);

    // Capture logon time for use in timer().

    onHours = now.getHours();

    onMinutes = now.getMinutes();

    onSeconds = now.getSeconds();  

    }

 function getLogoffTime()

    {

    var now = new Date();

    // Used to display logoff time.

    var ampm = (now.getHours() >= 12) ? " P.M." : " A.M."

    var Hours = now.getHours();

          Hours = ((Hours > 12) ? Hours - 12 : Hours);

    var Minutes = ((now.getMinutes() < 10) ? ":0" : ":") + now.getMinutes();

    var Seconds = ((now.getSeconds() < 10) ? ":0" : ":") + now.getSeconds();

    // String to display log-off time.

    OffTimeValue =(" "

        + Hours

        + Minutes

        + Seconds

        + " "

        + ampm);

    // Capture logoff time for use in timer().

    offHours = now.getHours();

    offMinutes = now.getMinutes();

    offSeconds = now.getSeconds(); 

    timer(); 

    }

 // Compute difference between logoff time and logon time. 

 function timer()

    { 

    if (offSeconds >= onSeconds)

       { logSeconds = offSeconds - onSeconds; }

    else

       {

       offMinutes -= 1;

       logSeconds = (offSeconds + 60) - onSeconds;      

       }

    if (offMinutes >= onMinutes)

       { logMinutes = offMinutes - onMinutes; }

    else

       {

       offHours -= 1;

       logMinutes = (offMinutes + 60) - onMinutes;

       }

    logHours = offHours - onHours;

    // Used to display time on page.

    logHours =  ((logHours < 10) ? "0" : ":") + logHours;

    logMinutes = ((logMinutes < 10) ? ":0" : ":") + logMinutes;

    logSeconds = ((logSeconds < 10) ? ":0" : ":") +logSeconds;

    // String to display time on page.

    PageTimeValue =(" "

        + logHours

        + logMinutes

        + logSeconds);

    displayTimes();

    }

 function displayTimes()

    {

    alert("Thank you for visiting my Site\  \nLOG ON TIME    : " +OnTimeValue+"\n\nLOG OFF TIME  : "+OffTimeValue+"\n\nTIME ON PAGE : " + PageTimeValue);

    }

 //  -->

 
</SCRIPT>
Den koden skal i HEAD-taggen på nettsiden din.

Kode

<body onUnLoad="WinOpen()" onLoad="getLogonTime()";>
Og denne i BODY-taggen din.


Det scriptet kommer med en popup om hvor lenge du har vert innpå siden. Du klarer nok å modde den hvis du tenker litt
Sist endret av fulloggal; 21. januar 2008 kl. 01:21.