Avatar billede kiwankow Nybegynder
13. november 2008 - 16:40 Der er 32 kommentarer og
1 løsning

hjælp til "Set-Cookie"

Hej jeg leder efter en ekspert der har forstand på Set-Cookie funktionen...

Set-Cookie    time_generated
Cookie    time_generated

hvordan skærer man ned på tiden her..??
Avatar billede moddi100 Seniormester
13. november 2008 - 16:50 #1
Hvad mener du helt præcist? Vil du angive hvor lang tid den satte cookie eksisterer?

setcookie("NAVN", "VÆRDI", time() + 15 * 60);

15 er så antallet af minutter din cookie eksisterer. Du kan også vælge at sige at den skal slettes, når browseren lukkes:

setcookie("NAVN", "VÆRDI");

Dette er PHP, men det fremgår ikke tydeligt af dit spørgsmål, hvilket programmeringssprog du skal bruge det i.
Avatar billede kiwankow Nybegynder
13. november 2008 - 17:05 #2
mit mål var at forkorte den tid det tager at sende cookien da det varer11-12 sekunder på nuværende tidspunkt og siden kan ikke vises før denne cookie er sendt
Avatar billede showsource Seniormester
13. november 2008 - 17:06 #3
Hvis vi er i php, så bør du altid sætte en path også.

<?php
setcookie("cookienavn","vaerdi",0,"/");
?>

Her vil cookien eksistere fra rod af domain, så længe browservindue er åbent.

<?php
setcookie("cookienavn","vaerdi",(time()+3600),"/");
?>

cookien er i live en time

<?php
setcookie("cookienavn","vaerdi",(time()-3600),"/");
?>

cookien slettes, fordi dens levetid er i minus
Avatar billede showsource Seniormester
13. november 2008 - 17:08 #4
ahh, så er det måske i javascript du skal sætte din cookie ?

Men du mangler stadig at fortælle hvilket sprog du vil sætte cookien i?
Avatar billede kiwankow Nybegynder
13. november 2008 - 17:13 #5
sorry det er php..

sådan her ser det ud nu..



 

header("Content-type:text/html;charset=utf-8");



if (Navigator::isRequestedUnderLegalURI()){



    $uri = Navigator::getUri();



    //$page_config = new PageConfig($uri);



    $page_config = PageConfig::getPageConfig ($uri);



    // the Responder!!!



    if ($page_config->PageExists()){



        $page_content = System::getPage($page_config);

       

        $time_generated = calc_microtime($t_generated);

       

        setcookie('time_generated', sprintf('%.3f', $time_generated));

       

        echo $page_content;



        }

    elseif ($page_config->isADirecotryRequestedWithoutASlashAtTheEnd()){



        header($_SERVER['SERVER_PROTOCOL'] . ' 301 Moved Permanently');// no such page in configuration

        header("Location: {$_SERVER['REQUEST_URI']}/");

        echo "The requested resource is located under a different URL: {$_SERVER['REQUEST_URI']}/";



        }

    elseif (System::doesParentUserPageExist($uri)) {

       

        $parent_uri = System::getUserPageParentURI($uri);

        $page_config = PageConfig::getPageConfig ($parent_uri);

       

        $passed_parameters_via_uri = substr($uri, strlen($parent_uri));

       

        $_REQUEST['passed_parameters_via_uri'] = $passed_parameters_via_uri;

       

        $page_content = System::getPage($page_config);

        echo $page_content;

       

    }

    else{ // the 404 error case!



        header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');// no such page in configuration

        echo "404 Not Found";



        }

    }

else{



        header($_SERVER['SERVER_PROTOCOL'] . ' 403 Forbidden');// not configured to answer such request

        echo "The software is not configured to respond to requests of the following host: {$_SERVER['HTTP_HOST']}\n";





    }



?>
Avatar billede showsource Seniormester
13. november 2008 - 17:17 #6
Sikkert fordi du bør sætte cookie inden noget som helst output til browser.
header("Content-type:text/html;charset=utf-8");
er f.eks. output til browser.

Det kan fixes med ob_start() men er ikke nogen god løsning. ( Suger på serveren )
Avatar billede kiwankow Nybegynder
13. november 2008 - 17:19 #7
sådan her ser resultaterne ud i firebug..

Set-Cookietime_generated=11.056
CookiePHPSESSID=71a5969d52dfed3d097ad28c6b62c1a9; time_generated=7.954

det er jo totalt uacceptabelt :-)
Avatar billede kiwankow Nybegynder
13. november 2008 - 17:21 #8
kan du forklare lidt nærmere hvad jeg skal gøre så kan jeg lige lave en test og se om det går hurtigere
Avatar billede showsource Seniormester
13. november 2008 - 17:23 #9
Jahhh, men det er jo garanteret php koden som laver griseriet!
Den cookie der, er jo den som sættes ved

<?php
session_start();

// resten af scriptet

?>

Og jeg kenderikke firebug! :O)
Ej heller den kode som sætter cookien.
Avatar billede showsource Seniormester
13. november 2008 - 17:26 #10
Altså, du viser ikke hvornår session_start() bruges.

Men en cookie skal altid sættes før noget output til browser, som nævnt, og hvis cookien sættes efter output, er det skod kode!
Avatar billede kiwankow Nybegynder
13. november 2008 - 17:36 #11
bare glem fire det er bare et program der viser hvor lang tid hver enkelt del tager, og set-cookie tager næsten 12 sekunder og det er det jeg gerne vil have gjort hurtigere da siden ikke vises før cookien er lavet. Dette betyder at fra du taster url og til siden vises går der ca 15 sekunder og det er jo alt for meget.

du får lige hele php koden:

<?php



function get_microtime()

{

    list($usec, $sec) = explode(" ", microtime());

    return ((float)$usec + (float)$sec);

}



function calc_microtime($from = 0)

{

    return get_microtime() - $from;

}



$t_generated = calc_microtime();



error_reporting(E_ALL);



class TimeCalculator {



    var $start_time;

    var $caption;

   

    function TimeCalculator($caption) {

        $this->start_time = microtime();

        $this->caption = $caption;   

    }

   

    function getElapsedTime() {

        $end_time = microtime();

        $elapsed_time = round($this->getFloatTime($end_time) - $this->getFloatTime($this->start_time), 3);

        echo "<b>{$this->caption}</b> was executed in <b>$elapsed_time</b> seconds <br>\r\n";

    }

   

    function getFloatTime($time_str) {

        list($usec, $sec) = explode(" ", $time_str);

        return ((float)$usec + (float)$sec);       

    }

   

}



define ('PATH_TO_SYSTEM_CLASS','system/core/System.php');



//////////////////////////////////////////////////////////////////

//

//        start of the script actions

//

//////////////////////////////////////////////////////////////////





require_once(PATH_TO_SYSTEM_CLASS);



//if (file_exists('system/user-config/LocalSettings.php')) echo "file exists"; else "not";



System::loadSystemSettings ('system/user-config/DefaultSettings.php');

System::loadSystemSettings ('system/user-config/LocalSettings.php');



require_once('admin/lang/'. System::getSystemSettings ('LOCALE') .'.php');//ȀЋRˀ



if (is_null(System::getSystemSettings('SITE_URL')))

{

    header("Location: install.php");

    exit;

}

elseif (is_readable ("install.php"))

{

    echo '<p>Your installation is temporarily disabled because the install.php file in the root of your'

    .' installation is still readable.<br> To proceed, please remove the file or change its mode to make'

    .' it non-readable for the Apache server process and refresh this page.</p>';

    exit;

}



System::boot();

System::init();



 

header("Content-type:text/html;charset=utf-8");



if (Navigator::isRequestedUnderLegalURI()){



    $uri = Navigator::getUri();



    //$page_config = new PageConfig($uri);



    $page_config = PageConfig::getPageConfig ($uri);



    // the Responder!!!



    if ($page_config->PageExists()){



        $page_content = System::getPage($page_config);

       

        $time_generated = calc_microtime($t_generated);

       

        setcookie('time_generated', sprintf('%.3f', $time_generated));

       

        echo $page_content;



        }

    elseif ($page_config->isADirecotryRequestedWithoutASlashAtTheEnd()){



        header($_SERVER['SERVER_PROTOCOL'] . ' 301 Moved Permanently');// no such page in configuration

        header("Location: {$_SERVER['REQUEST_URI']}/");

        echo "The requested resource is located under a different URL: {$_SERVER['REQUEST_URI']}/";



        }

    elseif (System::doesParentUserPageExist($uri)) {

       

        $parent_uri = System::getUserPageParentURI($uri);

        $page_config = PageConfig::getPageConfig ($parent_uri);

       

        $passed_parameters_via_uri = substr($uri, strlen($parent_uri));

       

        $_REQUEST['passed_parameters_via_uri'] = $passed_parameters_via_uri;

       

        $page_content = System::getPage($page_config);

        echo $page_content;

       

    }

    else{ // the 404 error case!



        header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');// no such page in configuration

        echo "404 Not Found";



        }

    }

else{



        header($_SERVER['SERVER_PROTOCOL'] . ' 403 Forbidden');// not configured to answer such request

        echo "The software is not configured to respond to requests of the following host: {$_SERVER['HTTP_HOST']}\n";





    }



?>
Avatar billede kiwankow Nybegynder
13. november 2008 - 17:38 #12
medmindre du selfølgelig kan se andre fejl som kan være skyld i den langsomme loadtid..

Jeg er lige på vej ud af døren er tilbage igen 20.30 ca glæder mig til at se om du kan hjælpe mig :-)
Avatar billede showsource Seniormester
13. november 2008 - 17:46 #13
Well, umiddelbart, vil jeg tro at hvis du smider
header("Content-type:text/html;charset=utf-8");

ind i hver af dine if() og UNDER setcookie() vil det virke hurtigere ?

Men hvad der ellers er i andre includefiler aner jeg jo ikke.
Avatar billede moddi100 Seniormester
13. november 2008 - 17:59 #14
du kan jo prøve at lave en enkelt side der kun sætter en cookie og så tage tid på det.

Altså:

<?php setcookie("TEST", "Smart!", time() + 15 * 60, '/'); ?>
Avatar billede kiwankow Nybegynder
13. november 2008 - 21:26 #15
Hej igen så er jeg tilbage :-)

Måske er det lidt meget at be om men kan du lokkes til at placere den streng du skrev de steder hvor du mener den skal være, for jeg laver garanteret bare endnu mere rod i det. :-(
Avatar billede kiwankow Nybegynder
14. november 2008 - 19:14 #16
hey moddi100 er du her endnu? :-)
Avatar billede moddi100 Seniormester
14. november 2008 - 21:00 #17
Ja. Var dog ikke sikker på om det var til mig du snakkede.

Jeg ved ikke hvordan du måler hastigheden med firebug, men lav en ny php fil f.eks. test.php.

[test.php]
<?php setcookie("TEST", "Smart!", time() + 15 * 60, '/'); ?>

Filen skal altså kun bestå af én enkelt linie, nemlig ovenstående. Så måler du med dit program (firebug) hvor hurtig/langsom den er om at sætte en session og smider resultatet herind.

Hvis det tager 10 sek, kan vi jo se, at det er setcookie()-funktionen der tager lang tid, men tager det ikke så lang tid er det altså resten af dit script du skal kigge på.
Avatar billede kiwankow Nybegynder
14. november 2008 - 22:51 #18
showsource:
Måske er det lidt meget at be om men kan du lokkes til at placere den streng du skrev de steder hvor du mener den skal være, for jeg laver garanteret bare endnu mere rod i det. :-(

moddi100:
umiddelbart går det rimelig hurtigtmed den fil du bad mig lave. ca. 0,5 sekund, så hvad er dit næste forslag..??
Avatar billede moddi100 Seniormester
15. november 2008 - 00:06 #19
Derved kan vi altså konkludere at det ikke tager længere tid at sætte en cookie end normalt.
Det er altså en anden del af dit script du skal kigge på. Det er ikke cookien der er tidsrøveren.
Avatar billede kiwankow Nybegynder
15. november 2008 - 07:54 #20
har du så nogen forslag der..??
Avatar billede moddi100 Seniormester
15. november 2008 - 13:25 #21
Nej ikke rigtig. Men tidsrøveren ligger formodentlig i en af disse to funktioner:

System::boot();
System::init();

Er det permanent du laver en tidstest på siden, eller er det noget du kun går lige nu når du tester? (F.eks. TimeCalculator()-classen som du aldrig bruger)
Avatar billede kiwankow Nybegynder
15. november 2008 - 14:27 #22
det er kun lige nu når jeg tester.. ved du noget om det showsource sagde mht. til at rykke header("Content-type:text/html;charset=utf-8"); ind i hver af dine if() og UNDER setcookie() vil det virke hurtigere ?
Avatar billede showsource Seniormester
15. november 2008 - 15:12 #23
Vi aner jo ikke hvad der er i dine funktioner, der er måske også output til browser ?
( hvilket jeg tror er synderen er loadtid )
Avatar billede moddi100 Seniormester
15. november 2008 - 15:35 #24
Jeg tror ikke det vil have nogen større effekt af flytte den headerlinje, men du kan jo altid prøve.
Avatar billede olebole Juniormester
15. november 2008 - 15:55 #25
<ole>

Prøv at lave din tidstest rundt om denne linje:
    $page_content = System::getPage($page_config);

Formodentlig er det dér, tiden bliver slugt. Det er meget sandsynligt, du der foretager noget template- eller database-halløj, som er rygende ineffektivt - men det er umuligt at sige noget objektivt om, da du ikke viser de kritiske dele af din kode

/mvh
</bole>
Avatar billede kiwankow Nybegynder
15. november 2008 - 17:38 #26
showsource: jeg er ikke helt med. Jeg har vist hele koden der er ikke andet på php siden. hvad vil du have mig til at gøre.??

olebole: hvordan laver jeg en tidstest rundt om den linje du skriver..??
Avatar billede olebole Juniormester
15. november 2008 - 17:53 #27
Jeg tror, du bør sætte dig ind i PHP, før du begynder at bruge det. Selvom man har hjælp fra Eksperten i baghånden, er man nødt til selv at have et minimum af viden om sproget, man ønsker at bruge  =)
Avatar billede kiwankow Nybegynder
15. november 2008 - 17:56 #28
så du kan ikke forklare hvordan man laver en tidstest altså
Avatar billede olebole Juniormester
15. november 2008 - 18:02 #29
Jo, men det giver ikke mening, at vi laver det hele for dig. Eksperten handler om hjælp til selvhjælp. Du er derfor nødt til at sætte dig grundigere ind i PHP  =)
Avatar billede olebole Juniormester
15. november 2008 - 18:04 #30
Du laver selv en tidstest, som koden er nu. Den kan du vel bare flytte  =)
Avatar billede kiwankow Nybegynder
15. november 2008 - 18:10 #31
jeg laver ikke nogen tidstest jeg ser bare resultaterne i firebug
Avatar billede moddi100 Seniormester
15. november 2008 - 18:16 #32
Aflæser firebug ikke bare den cookie der er lavet?

For at lave en tidstest som olebole foreslår, skal du blot flytte denne linje:

$t_generated = calc_microtime();

hen lige før:

$page_content = System::getPage($page_config);

Men jeg er helt enig med olebole. Du bør sætte dig ind i PHP når du laver sådan noget.
Avatar billede kiwankow Nybegynder
24. november 2008 - 20:29 #33
lukket
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