Avatar billede riversen Nybegynder
11. juni 2003 - 15:16 Der er 26 kommentarer og
2 løsninger

noget med cookies

Jeg vil gerne registrere hvor mange gange en bestemt side er blevet besøgt...og samme pc må selvfølgelig ikke tælle med flere gange inden for fx 30 min.

Det er vel noget med jeg skal sætte en cookie, hvis ikke den er sat, som indeholder sidens id samt en tidsgrænse eller hvad?

hvordan gør jeg det? og hvordan læser jeg den igen?

Kan man desuden sætte en cookie som aldrig udløber?
Avatar billede fangel Nybegynder
11. juni 2003 - 15:23 #1
du kan sætte en cookie som udløber om 25år, sålang tid kan det ikke tænkes at brugerens pc lever uden at bleve formateret, eller cookies fjeret...

du sætter en cookie v.h.a cookie() funktionen

cookie("navn_paa_cookie","indhold af cookien",time()+60);

siste parameter er udløbstiden... denne er sat til 1 min, da 60 sek jo er et min
---
du læser cookier ved at skrive

$_COOKIE['navn_paa_cookie'];

bemærk at en side skal reloades før cookien er til rådighed...

Morten
Avatar billede ztyxx Nybegynder
11. juni 2003 - 15:26 #2
her er et jeg selv bruger, baseret på PHP/MySQL
tabellen i databasen:

# Table structure for table taeller
#

CREATE TABLE taeller (
  id tinyint(5) DEFAULT '0' NOT NULL auto_increment,
  hit bigint(5) unsigned zerofill DEFAULT '00000' NOT NULL,
  PRIMARY KEY (id)
);



scriptet:

<?php

require('dbinc.php'); //databaseconnect
if(!$_COOKIE["tael"]) { //hvis ikke der er sat en cookie, opdateres tælleren med en
    mysql_query("UPDATE taeller set hit=hit+1") or die(mysql_error());
    setcookie("tael", time()+86400); // her sættes cookien, også selv om den er sat, denne gælder i et døgn (60*60*24)
} else {
    setcookie("tael", time()+86400); //hvis cookien er sat, og besøget er inden for 24 timer fra sidste besøg, forlænges udløbet med et døgn
}
?>
Avatar billede riversen Nybegynder
11. juni 2003 - 15:32 #3
hvordan ved jeg om cookien er udløbet. Kan jeg så ikke få fat på den ?
Avatar billede fangel Nybegynder
11. juni 2003 - 15:35 #4
korrekt
Avatar billede ztyxx Nybegynder
11. juni 2003 - 15:37 #5
men i mit eksempel bliver den sat, både hvis den er udløbet og hvis den ikke gør, men man skal være opmærksom på, at brugerne kan have disabled cookies i sin browser
Avatar billede riversen Nybegynder
11. juni 2003 - 15:38 #6
Jeg får denne fejl:
Notice: Undefined index: tael in D:\Hjemmesider\riversen.dk\index.php on line 1256

Warning: Cannot modify header information - headers already sent by (output started at D:\Hjemmesider\riversen.dk\index.php:5) in D:\Hjemmesider\riversen.dk\index.php on line 1258

har indsat følgende kode:
                                    if( !$_COOKIE['tael'])
                                    {
                                        setcookie("tael", time()+30);
                                        echo ( "Dette er første gang inden for 30 sek." );
                                    }
                                    else
                                    {
                                        echo ( "Dette er ikke første gang inden for 30 sek." );
                                    }
Avatar billede ztyxx Nybegynder
11. juni 2003 - 15:40 #7
du har en eller anden form for output før du sætter din cookie
Avatar billede fangel Nybegynder
11. juni 2003 - 15:42 #8
du skal bruge isset (og desuden mangler du et parameter til cookie

                                    if( !isset($_COOKIE['tael']) )
                                    {
                                        setcookie("tael", "indhold", time()+30);
                                        echo ( "Dette er første gang inden for 30 sek." );
                                    }
                                    else
                                    {
                                        echo ( "Dette er ikke første gang inden for 30 sek." );
                                    }

Morten
Avatar billede ztyxx Nybegynder
11. juni 2003 - 15:43 #9
du skal sætte tællefunktionen som det først i den fil du vil tælle på, ellers får du headerfejlen for dine cookies
Avatar billede riversen Nybegynder
11. juni 2003 - 15:46 #10
tror lige jeg skal forklare lidt.

Jeg har en php fil. Hvis jeg sender ?aid=1 skal den inkludere en bestemt fil. sender jeg ?aid=2 en anden fil etc.

hvordan tæller jeg på det?
Avatar billede riversen Nybegynder
11. juni 2003 - 15:47 #11
skal jeg aller øverst i filen siger, hvis aid er sat så sæt en cookie
Hvordan tjekker jeg indholdet af cookien? Tænker på hvis jeg gerne vil have til at stå:

aid1 = 4 visits
aid2 = 6 visits

eller noget i den stil. skal jeg lave forskellige cookies for hver aid eller?
Avatar billede fangel Nybegynder
11. juni 2003 - 15:49 #12
eller gemme "aid[nummer]" i cookien, og så tælle op... (eller få cookien til at indeholde et array

Morten
Avatar billede riversen Nybegynder
11. juni 2003 - 15:52 #13
dvs. $_COOKIE['navn_paa_cookie']; returnerer indholdet
Avatar billede ztyxx Nybegynder
11. juni 2003 - 15:53 #14
du skal nok bruge echo $_COOKIE['navn_paa_cookie'];
Avatar billede riversen Nybegynder
11. juni 2003 - 16:19 #15
det kører nu...sådan da...kan det virkelig passe man bare kan lukke browseren og så åbne en ny og så gælder cookien ikke længere? Eller hvordan kommer man udover det problem
Avatar billede ztyxx Nybegynder
11. juni 2003 - 16:20 #16
har du husket at sætte den med mere end de 30 sekunder du gjorde i dit eksempel?
Avatar billede riversen Nybegynder
11. juni 2003 - 16:22 #17
ja...1800
hvis jeg opdaterer sker der nemlig ingenting, så jeg går ud fra det er som det skal være
Avatar billede ztyxx Nybegynder
11. juni 2003 - 16:23 #18
men den tæller stadig hvis du lukker/åbner browseren??
Avatar billede riversen Nybegynder
11. juni 2003 - 16:23 #19
ja
Avatar billede ztyxx Nybegynder
11. juni 2003 - 16:24 #20
underligt, det gør den ikke på min side
Avatar billede riversen Nybegynder
11. juni 2003 - 16:25 #21
sådan ser det ud øverst i filen:
<?php
    if( isset( $_GET['aid'] ) )
    {
        if( !isset($_COOKIE['article' . $_GET['aid']] ) )
        {
            setcookie( 'article' . $_GET['aid'], time()+1800 );
            $connect = odbc_connect( xxxxx );
            $query = "UPDATE artikler set visninger=visninger+1 WHERE artikel_id =" . $_GET['aid'];
            $result = odbc_do( $connect, $query );
        }
    }
?>
Avatar billede fangel Nybegynder
11. juni 2003 - 16:26 #22
du mangler altså det 2. paramter til cookien...

setcookie( 'article' . $_GET['aid'], "dummy indhold", time()+1800 );

Morten
Avatar billede riversen Nybegynder
11. juni 2003 - 16:27 #23
ja, det hjalp søreme :-)
Avatar billede ztyxx Nybegynder
11. juni 2003 - 16:35 #24
takker for point :-)
Avatar billede fangel Nybegynder
11. juni 2003 - 16:43 #25
også her
Avatar billede riversen Nybegynder
13. juni 2003 - 15:39 #26
hvad gør "require" helt nøjagtigt?
Avatar billede fangel Nybegynder
13. juni 2003 - 15:40 #27
det samme som "include", den laver bare en fatal error ved fejl... include laver bare en error ;)

Morten
Avatar billede riversen Nybegynder
15. juni 2003 - 15:19 #28
ztyxx: hvordan ser din 'dbinc.php' ud?
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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