Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Milloin header-funktiota saa käyttää?

Paulus M [22.10.2009 21:40:53]

#

Eli osaisiko joku lyhyesti selittää vähän tarkemmin, milloin header funktiota saa käyttää.

Eli php dokumentaatiossa selitetään, että headeriä ei voi käyttää, jos on tulostettu jokin html tagi tai vastaavaa.

Mutta esimerkiksi tuolla koodivinkeissä toi sisäänkirjautuminen php:llä toimii niin, että on jo tulostettu input kentät tunnus ja salasana jne, mutta sitten jossain vaiheessa kuitenkin on header funktion kutsu, kun ollaan käväisemässä yhdessä toisessa kirjautumis scriptissä (ylaosa.php).

Niin mikä on logiikka header funktiossa suhteen? Eli jos siirtyy php scriptiltä toiseen, niin aina uudessa scriptissä voi olla header funktion käyttö, niin kauan kun ei laiteta mitään outputtia? Vaiko jos olen tulostanut jollakin scriptillä tavaraa, niin jotta voisin käyttää headeriä, niin mun on kutsuttava jotain toista php scriptiä, jossa voin sitten ajaa hearder funktion.

Jos toisia scriptejä includaa, niin mikä on niitten vaikutus header-funktion käyttöön?

Tässä vielä php koodivinkki, josta puhuin.
https://www.ohjelmointiputka.net/koodivinkit/24301-php-kirjautuminen-rekisteröityminen-mysql-llä

tsuriga [22.10.2009 21:51:42]

#

http://pp.kpnet.fi/blaze/codefaq/#headerssent
Tulostuksen puskurointi

trilog [22.10.2009 21:52:08]

#

Headereita ennen ei saa tulostaa mitään.

Paulus M kirjoitti:

Mutta esimerkiksi tuolla koodivinkeissä toi sisäänkirjautuminen php:llä toimii niin, että on jo tulostettu input kentät tunnus ja salasana jne, mutta sitten jossain vaiheessa kuitenkin on header funktion kutsu, kun ollaan käväisemässä yhdessä toisessa kirjautumis scriptissä (ylaosa.php).

Ei minun silmääni ainakaan osunut tuollaista kohtaa; uudelleenohjaus tehdään ennen kuin mitään on lähetetty selaimelle.

Paulus M kirjoitti:

Jos toisia scriptejä includaa, niin mikä on niitten vaikutus header-funktion käyttöön?

Tässä pitää olla tarkkana siinä mielessä, ettei includettu skripti tulosta mitään, jos headerit pitää lähettää myöhemmässä vaiheessa.

Joskus näkee tapauksia joissa tulostus puskuroidaan, jolloin näiennäisesti voidaan tulostaa ennen headereiden lähetystä. Todellisuudessa kuitenkin tulostetaan puskuriin, joka lähetetään selaimelle vasta headereiden lähetyksen jälkeen.

Headereiden tutkimiseen löytyy kätevä funktio headers_sent:

<?php
var_dump(headers_sent()); // tulostaa bool(false)

var_dump(headers_sent()); // tämä tulostaakin bool(true), koska edellinen var_dumpin tulostus lähetti headerit
?>

Paulus M [22.10.2009 23:48:51]

#

Kiitos hyvistä vastauksista, selkensi huomattavasti.

Sellainen kysymys vielä, että eikö periaatteessa olla kuitenkin tulostettu jo jotain, koska ennen kuin mennään tuonne kirjautumis-php scriptiin, niin ollaan syötetty tunnus ja salasana, eli ollaan tulostettu selaimelle vähintään tunnus kenttä ja salasana kenttä(kentän nimet ja niiden sisältö), jonka jälkeen mennään toiseen scriptiin jossa lähetetään headeri! Minkä takia on sitten mahdollista lähettää headeri, vaikka ollaan jo tulosteltu? (Tosin toisessa scriptissä)


EDIT: hyvä läppä toi tsiguran saitti :D - sika hyödyllinen saitti muuten. Monissa oppaissa FAQit unohtuu kokonaan ja puhutaan asiasta mikä on selkeää ja kun lukija alkaa koodaa, niin kaikki koodarit painii samojen probleemien kanssa liian pitkän aikaa.

trilog [23.10.2009 00:13:37]

#

Tuossa koodivinkissä kun tulostetaan nuo kentät ja niihin kun sitten kirjoittaa käyttäjätunnuksen ja salasanan sekä lähettää ne, jolloin tulee uusi sivupyyntö eli headerit tyhjentyvät. Tämän jälkeen kun sama sivu ladataan uudestaan POST-taulukosta löytyykin tunnus ja salasana, joita sitten tarkastellaan ym. ja tässä lähetetään headerit tarvittaessa (eli mitään ei olla taaskaan tulostettu ennen headereiden lähetystä, koska ne nollaantuvat joka sivupyynnöllä).

Paulus M [23.10.2009 00:59:57]

#

Hei nyt selkee trilog, suuret kiitokset! Eli tulee uusi sivupyyntö, jos oisin itse joutunut selvittää tän olisi varmaan mennyt 4 tuntia.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta