Avatar billede cmau Nybegynder
21. oktober 2006 - 17:51 Der er 28 kommentarer og
1 løsning

Cookie test mangler kun lidt

Hejsa

Nu har jeg leget meget med cookie for at finde ud af hvordan jeg kan test om folk tillader cookies eller ej og derefter blot vist domæne.com/ og ikke ?cookie=true/flase.

Koden virker nu så hvis man tillader cookies vises domæne.com blot, men hvis man ikke har cookies vises domæne.com/?cookie=1, men man kan jo ikke blot sende personen til domæne.com/ igen fordi så vil man jo blot kører i ring.

Hvad kan jeg gøre?

Grunden til at jeg ikke kan have noget efter domæne.com/ er at folk kan finde på at kopirer linket til andre og hvis en kopirer domæne.com/?cookie=1 til en anden, vil den andens "stemme" ikke registeres, fordi koden tror han ikke tillade cookies.

<?
ob_start();
setcookie('foo', 'yesido', time()+9999999);
if (empty($_COOKIE['foo']) && !empty($_GET['count'])) {
    echo 'Du tillader ikke cookies!';
} elseif (empty($_COOKIE['foo']) && empty($_GET['count'])) {
    header("Location: ?count=1");
} elseif (!empty($_COOKIE['foo']) && !empty($_GET['count'])) {
    header("Location: ?");
} else {
    echo 'Cookien er nu sat til: '.$_COOKIE['foo'];
}
Ob_end_flush();
?>
Avatar billede sjh Nybegynder
22. oktober 2006 - 01:12 #1
Set en cookie med php og test den med javascript..

<?php
  /* Cookie test for Javascript. 30 sek. */
  $cookiename = "TestCookie";
  setcookie($cookiename, $cookiename, time()+30);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <title>Test cookie.</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <script type="text/javascript">
    function nocookie(n, j) {
      try {var c = document.cookie;
      var s = c.indexOf(n+"=");
      if (s > -1) {
        s += (n.length + 1);
        if (n == unescape(c.substring(s, s + n.length))) {
          return;
        }
      }
      document.location.href=j} catch(e) {document.location.href=j};
    }
    nocookie("<?=$cookiename;?>", "/nocookie.htm");
    </script>
  </head>
  <body>
  </body>
</html>

husk at lave en ny side til nocookie.htm
Avatar billede coderdk Praktikant
22. oktober 2006 - 01:44 #2
Jeg lavede engang denne:

<?php

session_start();

if ( strlen( $_GET['confirm'] ) > 0 )
{
  $cenabled = $_COOKIE['cookieset'];
  $senabled = $_SESSION['sessionset'];
  setcookie( 'cookieset' );
  session_destroy();
}
else
{
  setcookie( 'cookieset', 1, time() + 3600 );
  $_SESSION['sessionset'] = 1;
  header( "location: $_SERVER[PHP_SELF]".'?confirm=1' );
  exit;
}
                   
$cook = '<h1>Cookies are ' . ($cenabled ? 'en' : 'dis') . 'abled!</h1>';
$ses = '<h1>Sessions are ' . ($senabled ? 'en' : 'dis') . 'abled!</h1>';

?>
<html>
    <head>
        <title>Session/Cookie detector</title>
    </head>
    <body>
        <?= $cook ?>
        <?= $ses ?>
        <h3><a href="<?= $_SERVER['PHP_SELF'] ?>">Reload page</a></h3>
    </body>
</html>
Avatar billede sjh Nybegynder
22. oktober 2006 - 01:49 #3
eller også gør du bare sådan.. hvis der ikke tillades cookie.. så vil den heller ikke vise afstemning..


<?php
  /* Cookie test for Javascript. 30 sek. */
  $cookiename = "TestCookie";
  setcookie($cookiename, $cookiename, time()+30);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <title>Test cookie.</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <script type="text/javascript">
    function stemcookie(n, o) {
      try {var c = document.cookie;
      var s = c.indexOf(n+"=");
      if (s > -1) {
        s += (n.length + 1);
        if (n == unescape(c.substring(s, s + n.length))) {
          o.style.display = "block";
          return;
        }
      }
      } catch(e) {};
    }
    window.onload = function () {
      stemcookie("<?=$cookiename;?>", document.getElementById("afstemning"));
    }
    </script>
  </head>
  <body>
  <div id="afstemning" style="display:none;">
  her laver du så din afstemning..
  </div>
  </body>
</html>
Avatar billede cmau Nybegynder
22. oktober 2006 - 10:31 #4
sjh > Vil ikke have noget javascript ind i det, helst ikke.

coderdk > Der er jo samme problem med din, hvis en person tilgår http://kdp.users.whitehat.dk/cookietest.php?confirm=1 med et samme vil de altid få at vide at de ikke tillader cookies.
Avatar billede cmau Nybegynder
22. oktober 2006 - 10:33 #5
Hmm jeg kunne også bare overveje at lave hele siden i et frame som er 100%x100% så ville jeg ingen problemer have.
Avatar billede coderdk Praktikant
22. oktober 2006 - 11:58 #6
Det er da nemt nok at ændre ;)

<?php

session_start();

if ( strlen( $_GET['confirm'] ) > 0 )
{
    if ( empty( $_GET['ts'] ) || (!empty( $_GET['ts'] ) && ( $_GET['ts'] + 10 ) < time() ) )
    {
        header( "location: $_SERVER[PHP_SELF]");
        exit;
    }   
    $cenabled = $_COOKIE['cookieset'];
    $senabled = $_SESSION['sessionset'];
    setcookie( 'cookieset' );
    session_destroy();
}
else
{
    setcookie( 'cookieset', 1, time() + 3600 );
    $_SESSION['sessionset'] = 1;
    header( "location: $_SERVER[PHP_SELF]".'?confirm=1&ts=' . time() );
    exit;
}
                 
$cook = '<h1>Cookies are ' . ($cenabled ? 'en' : 'dis') . 'abled!</h1>';
$ses = '<h1>Sessions are ' . ($senabled ? 'en' : 'dis') . 'abled!</h1>';

?>
<html>
    <head>
        <title>Session/Cookie detector</title>
    </head>
    <body>
        <?= $cook ?>
        <?= $ses ?>
        <h3><a href="<?= $_SERVER['PHP_SELF'] ?>">Reload page</a></h3>
    </body>
</html>

Så virker linket kun i 10 sekunder. Med andre ord længe nok til at det virker, men ikke længe nok til at han kan sende linket til andre...
Avatar billede cmau Nybegynder
22. oktober 2006 - 12:32 #7
Hmm er ikke helt med, hvad så hvis de 10 sekunder er gået hvad sker der så med personen som besøger linket?
Avatar billede cmau Nybegynder
22. oktober 2006 - 12:34 #8
Ville du evt også oversætte den her for mig:
if ( empty( $_GET['ts'] ) || (!empty( $_GET['ts'] ) && ( $_GET['ts'] + 10 ) < time() ) )

Hvis ts er tom eller ikke tom og ts + 10 er mindre end time()?

Giver ikke ligé mening for mig
Avatar billede coderdk Praktikant
22. oktober 2006 - 12:40 #9
Her:

header( "location: $_SERVER[PHP_SELF]".'?confirm=1&ts=' . time() );

sætte ts til den aktuelle tid

if ( empty( $_GET['ts'] ) || (!empty( $_GET['ts'] ) && ( $_GET['ts'] + 10 ) < time() ) )

Her testes om ts er tom, hvis den tom eller hvis den er over 10 sekunder gammel reloader den siden og gentager testen
Avatar billede sjh Nybegynder
22. oktober 2006 - 13:39 #10
på din side : http://kdp.users.whitehat.dk/cookietest.php

får jeg da :
Cookies are disabled!
Sessions are enabled!

fordi jeg som standard ikke tillader cookie

når jeg så tillader cookie ser den sådan ud:
Cookies are enabled!
Sessions are enabled!

det ser da godt nok ud?
Avatar billede cmau Nybegynder
22. oktober 2006 - 16:35 #11
sjh > Jamen prøv at tryk på dette link: http://kdp.users.whitehat.dk/cookietest.php?confirm=1

#coderdk > Det værste er bare at adressen bliver faktisk endnu længere nu og det var jo også lidt det jeg prøvede at undgå.
Avatar billede sjh Nybegynder
22. oktober 2006 - 16:45 #12
Ja det er jo mening at man skal komme fra siden her : http://kdp.users.whitehat.dk/cookietest.php

og ikke :
http://kdp.users.whitehat.dk/cookietest.php?confirm=1
Avatar billede cmau Nybegynder
22. oktober 2006 - 16:57 #13
Det er jo det sjh. Hvis en person ser siden og vil sende linket til sine venner så kopirer han bare adressen i adresse feltet som er http://kdp.users.whitehat.dk/cookietest.php?confirm=1
Avatar billede sjh Nybegynder
22. oktober 2006 - 17:02 #14
det kan vel ikke blive dit problem?
Avatar billede coderdk Praktikant
22. oktober 2006 - 17:08 #15
OK:

<?php

session_start();

if ( !empty( $_GET['ok'] ) )
{
    if ( ( $_GET['ok'] + 10 ) < time() ) )
    {
        header( "location: $_SERVER[PHP_SELF]");
        exit;
    } 
    $cenabled = $_COOKIE['cookieset'];
    $senabled = $_SESSION['sessionset'];
    setcookie( 'cookieset' );
    session_destroy();
}
else
{
    setcookie( 'cookieset', 1, time() + 3600 );
    $_SESSION['sessionset'] = 1;
    header( "location: $_SERVER[PHP_SELF]".'?ok=' . time() );
    exit;
}
               
$cook = '<h1>Cookies are ' . ($cenabled ? 'en' : 'dis') . 'abled!</h1>';
$ses = '<h1>Sessions are ' . ($senabled ? 'en' : 'dis') . 'abled!</h1>';

?>
<html>
    <head>
        <title>Session/Cookie detector</title>
    </head>
    <body>
        <?= $cook ?>
        <?= $ses ?>
        <h3><a href="<?= $_SERVER['PHP_SELF'] ?>">Reload page</a></h3>
    </body>
</html>
Avatar billede coderdk Praktikant
22. oktober 2006 - 17:23 #16
if ( ( $_GET['ok'] + 10 ) < time() ) )

skal nok være:

if ( ( $_GET['ok'] + 10 ) < time() )

;P
Avatar billede cmau Nybegynder
22. oktober 2006 - 18:33 #17
Ej ved du hvad, jeg tror fandme jeg bruger frame ud over dne kode fordi, det  dur bare ikke at adressen bliver ændret fra navn.fuckingloveyou.com
Avatar billede cmau Nybegynder
23. oktober 2006 - 13:55 #18
Var Det så ikke muligt, at hvis nu man havde cookie sat til, at den så bare viste asd.fuckingloveyou.com/ uden noget efter, som min kode fra starten ville have gjort
Avatar billede cmau Nybegynder
23. oktober 2006 - 14:16 #19
Fik det vist selv snørglet ind i min :), men mangler stadigvæk en eller anden måde at gøre den mere simeptl på, altså adressen.

<?
ob_start();
setcookie('foo', 'yesido', time()+3600);
if (empty($_COOKIE['foo']) && !empty($_GET['x'])) {
    if (($_GET['x']+2)<time()) {
        header( "location: $_SERVER[PHP_SELF]");
        exit;
    }
    echo 'Du tillader ikke cookies!';
} elseif (empty($_COOKIE['foo']) && empty($_GET['x'])) {
    header("Location: ?x=".time());
} elseif (!empty($_COOKIE['foo']) && !empty($_GET['x'])) {
    header("Location: ?");
} else {
    echo 'Cookien er nu sat til: '.$_COOKIE['foo'];
}
Ob_end_flush();
?>
Avatar billede coderdk Praktikant
23. oktober 2006 - 14:22 #20
Så vidt jeg kan se vil du få et uendeligt loop hvis du har cookies disablet?
Avatar billede cmau Nybegynder
23. oktober 2006 - 14:31 #21
http://kdp.users.whitehat.dk/cookietest3.php
Det ser da ud til at virke, både med og uden.
Avatar billede coderdk Praktikant
23. oktober 2006 - 15:03 #22
Fair nok :-D
Avatar billede cmau Nybegynder
23. oktober 2006 - 15:09 #23
Mhh.. Den kan ikke laves mere simepel kan den vel?
Avatar billede cmau Nybegynder
25. oktober 2006 - 23:23 #24
Nå ikke :/
Avatar billede cmau Nybegynder
31. oktober 2006 - 14:46 #25
Smid svar.
Avatar billede coderdk Praktikant
31. oktober 2006 - 14:49 #26
ok (c:
Avatar billede cmau Nybegynder
31. oktober 2006 - 14:51 #27
Det var en kommentar.
Avatar billede coderdk Praktikant
31. oktober 2006 - 15:02 #28
lol sorry :D
Avatar billede cmau Nybegynder
03. november 2006 - 16:32 #29
hehe, sådan der :)
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