kokonaiskuva

puuttuu

olen harrastelija, omasta uteliaisuudesta teen tätä.

Mikä on oikea tapa säilyttää sessiokohtaisia muuttujia sivunvaihtojen välillä?

Tarkoitan "globaali" muuttujia (esim. ostoskauppaa (en tee tällaista, helpompi selittää) asiakas, salasana, avainasiakas, ostetut tavarat jne.)

Olen kokeillut (ja lukenut) kaikenlaista, aina tuntuu seinä tulevan vastaan. Yritin muodostaa tiedostonimen sessio-ID:n avulla, tiedostoja kerääntyy iso liuta kun käyttäjä painaa back-painiketta? (eikä se muutenkaan tunnu järkevältä ratkaisulta).

Tiedän että minulla on peruskäsitteet hukassa, siksi minä tänne kirjoitin.

Eli lyhyesti: Miten tietyn skriptolohkon alussa pystyn päättelemään kuka on "luurin toisessa päässä" ja kaivaamaan esille strategista tietoa hänestä?

(Tämä on varmasti trivialikysymys; En vaan verkkomanualeista löydä selkeää vastausta ja kun sama pää, kesät, talvet...)

12

829

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Piru

      Kun luot php:llä session, niin php lähettää joko session-cookien selaimelle tai muokkaa kaikki urlit niin, että urlin perässä kulkee session-id

      Seuraavan kerran kun käyttäjä taas tulee sivuille, niin tästä session-idstä tunnistetaan, että ai jaa tää on just tää tyyppi. Ihan turhaan luot mitään tiedostoja, koska sessiota luodessa luodaan automaattisesti tiedosto tätä sessiota varten ja siellä pidetään kaikki roina.

      Tuolla on mielestäni selitetty aika hyvin sessio-käsite.

      http://www.free2code.net/plugins/articles/read.php?id=184

      Sivun alussa aina session_start();
      Se luo uuden session, jos sellaista ei vielä ole. Sitten voit alkaa lukemaan ja pistämään dataa sessioon $_SESSION['name'] = 'Mikko';

      Seuraavalla sivulla

      session_start();
      $name = $_SESSION['name'];
      echo "terve taas" . $name;

      • meni jakeluun.

        Sanonhan että minulla oli peruskäsitteet hukassa;)

        Vielä pari kysymystä:

        1. Ilmeisesti voi _SESSION vektoriin myös laittaa olioita (class)? Miten välitetään tieto luokasta seuraavaan dokumenttiin (php:ssä ei ole miten erillistä definition ja declaration (.h ja .c tiedostot c :ssa))?

        2. Käytän easyPHP windows xp ja olen luonnut mySQL tietokannan (joka toimii mySQL-administartorilla testattuna). Kuitenkin kun yritän ottaa siihen php:llä (local host modissa) yhteyttä


      • Piru
        meni jakeluun. kirjoitti:

        Sanonhan että minulla oli peruskäsitteet hukassa;)

        Vielä pari kysymystä:

        1. Ilmeisesti voi _SESSION vektoriin myös laittaa olioita (class)? Miten välitetään tieto luokasta seuraavaan dokumenttiin (php:ssä ei ole miten erillistä definition ja declaration (.h ja .c tiedostot c :ssa))?

        2. Käytän easyPHP windows xp ja olen luonnut mySQL tietokannan (joka toimii mySQL-administartorilla testattuna). Kuitenkin kun yritän ottaa siihen php:llä (local host modissa) yhteyttä

        1. Sessioon voi laittaa luokkia minun tietääkseni. Ihmettelen vaan, että miksi seuraavalla php-sivulla ei tiedettäisi luokan tyyppiä? Ei kai sulla NIIN dynaamiset sivut ole, että sessioon voi mennä ihan mitä vaan ja missä järjestyksessä vaan.

        Eli ekalla sivulla pistät Kissa-luokan olion sessioon nimellä kissa ja otat samalla nimellä sen sessiosta toisella sivulla.

        Ainahan sen tyypin voi testata

        if($_SESSION['olio'] instanceof Kissa)
        {
        Kissa kisuli = $_SESSION['olio'];
        }

        2. Epäilen hiukan että lokaalistikaan saat otettu yhteyttä kantaan ilman käyttäjää ja salasanaa.

        $link = mysql_connect('localhost', 'root', 'secret_password');

        PS. Kannattaa luoda yhteys jossain toisessa php:ssä ja tuoda se includella tälle sivulle tai estää virheiden näyttäminen käyttäjälle. Jos yhteys kantaan epäonnistuu, niin käyttäjän silmille pamahtaa kannan tunnus ja salasanan. Sitä ei varmaan haluta?


      • taas kerran
        Piru kirjoitti:

        1. Sessioon voi laittaa luokkia minun tietääkseni. Ihmettelen vaan, että miksi seuraavalla php-sivulla ei tiedettäisi luokan tyyppiä? Ei kai sulla NIIN dynaamiset sivut ole, että sessioon voi mennä ihan mitä vaan ja missä järjestyksessä vaan.

        Eli ekalla sivulla pistät Kissa-luokan olion sessioon nimellä kissa ja otat samalla nimellä sen sessiosta toisella sivulla.

        Ainahan sen tyypin voi testata

        if($_SESSION['olio'] instanceof Kissa)
        {
        Kissa kisuli = $_SESSION['olio'];
        }

        2. Epäilen hiukan että lokaalistikaan saat otettu yhteyttä kantaan ilman käyttäjää ja salasanaa.

        $link = mysql_connect('localhost', 'root', 'secret_password');

        PS. Kannattaa luoda yhteys jossain toisessa php:ssä ja tuoda se includella tälle sivulle tai estää virheiden näyttäminen käyttäjälle. Jos yhteys kantaan epäonnistuu, niin käyttäjän silmille pamahtaa kannan tunnus ja salasanan. Sitä ei varmaan haluta?

        Olet oikea piru antamaan hyviä vastauksia!

        Kun tein mySQL:ään käyttäjåtilin ja menin sillä sisään, yksi ongelma poistui ja seuraava ilmestyi:

        Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\program files\easyphp1-8\www\includes.class:97) in c:\program files\easyphp1-8\www\lisa_sel.php on line 18

        Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\program files\easyphp1-8\www\includes.class:97) in c:\program files\easyphp1-8\www\lisa_sel.php on line 18

        koodi on:

        if(empty($_SESSION['admin']))
        {
        $admin = new Administrator($anv, $los);
        $admin = serialize($admin);
        session_start();
        $_SESSION['admin'] = $admin;

        }
        else
        {
            $admin = unserialize($_SESSION['admin']);
            $admin->check_login();
        }

        rivi 18 on tuo session_start();

        (tausta: Mitä yritän tehdä on sovellus missä on kahden tyyppisiä käyttäjiä, miehet (admin) ja naiset (goofer) joilla on hyvin erilaisia käyttöoikeuksia. Ryhmien yksilötiedot ovat kahdessa eri tietokantataulukossa (miksi: ei ole järkevää esim. kysyä mieheltä onko hänellä säännölliset kuukautiset).

        Eli minulla on vastaava koodipätkä ryhmälle goofer. Molemmille ryhmille tallennan SESSION muuttujaan oliot admin ja/tai goofer ja testaan niitä (ideana on että mies voi tekeytyä myös naiseksi mutta ei päinvastoin).

        Teenkö jotain väärin?

        PS. Viitaten siihen edelliseen kysymykseen, en saannut olioita toimimaan SESSION-muuttujassa muuta kun tuolla serialize()funnctiolla?

        PPS. En ole niin schauvinisti kuin ehkä vaikuttaa. Otin nuo naiset ja miehet esimerkkinä koska siten oli helpompaa selittää mitä ajan takaa, todellisuudessa teen jotain aivan muuta.


      • ---------
        taas kerran kirjoitti:

        Olet oikea piru antamaan hyviä vastauksia!

        Kun tein mySQL:ään käyttäjåtilin ja menin sillä sisään, yksi ongelma poistui ja seuraava ilmestyi:

        Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\program files\easyphp1-8\www\includes.class:97) in c:\program files\easyphp1-8\www\lisa_sel.php on line 18

        Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\program files\easyphp1-8\www\includes.class:97) in c:\program files\easyphp1-8\www\lisa_sel.php on line 18

        koodi on:

        if(empty($_SESSION['admin']))
        {
        $admin = new Administrator($anv, $los);
        $admin = serialize($admin);
        session_start();
        $_SESSION['admin'] = $admin;

        }
        else
        {
            $admin = unserialize($_SESSION['admin']);
            $admin->check_login();
        }

        rivi 18 on tuo session_start();

        (tausta: Mitä yritän tehdä on sovellus missä on kahden tyyppisiä käyttäjiä, miehet (admin) ja naiset (goofer) joilla on hyvin erilaisia käyttöoikeuksia. Ryhmien yksilötiedot ovat kahdessa eri tietokantataulukossa (miksi: ei ole järkevää esim. kysyä mieheltä onko hänellä säännölliset kuukautiset).

        Eli minulla on vastaava koodipätkä ryhmälle goofer. Molemmille ryhmille tallennan SESSION muuttujaan oliot admin ja/tai goofer ja testaan niitä (ideana on että mies voi tekeytyä myös naiseksi mutta ei päinvastoin).

        Teenkö jotain väärin?

        PS. Viitaten siihen edelliseen kysymykseen, en saannut olioita toimimaan SESSION-muuttujassa muuta kun tuolla serialize()funnctiolla?

        PPS. En ole niin schauvinisti kuin ehkä vaikuttaa. Otin nuo naiset ja miehet esimerkkinä koska siten oli helpompaa selittää mitä ajan takaa, todellisuudessa teen jotain aivan muuta.

        Tuo session_start(); pitää olla ihan ensinmäisenä. Ilman sitä $_SESSION['xx'] ovat aina tyhjiä.

        Ja ennen sitä et saa lähettää selaimelle päin yhtikäs mitään, et edes välilyöntiä, koska session_start() lähettää headereissa keksi juttuja.

        Voit käyttää myös http://fi.php.net/ob_start jolloin PHP järjestää headerit ensinmäises joten niitä voit lähettää missä kohti koodia tahansa. Tosin tämä on hiaman hitaampaa kuin tuo ylläesitetty korjaus.


      • minä (en)
        --------- kirjoitti:

        Tuo session_start(); pitää olla ihan ensinmäisenä. Ilman sitä $_SESSION['xx'] ovat aina tyhjiä.

        Ja ennen sitä et saa lähettää selaimelle päin yhtikäs mitään, et edes välilyöntiä, koska session_start() lähettää headereissa keksi juttuja.

        Voit käyttää myös http://fi.php.net/ob_start jolloin PHP järjestää headerit ensinmäises joten niitä voit lähettää missä kohti koodia tahansa. Tosin tämä on hiaman hitaampaa kuin tuo ylläesitetty korjaus.

        tekisi ilman sinua. Nyt lähti pyörimään!

        Vielä tekninen kysymys: Seuraako mitään pahaa jos kutsuu session_start() vahingossa kaksi kertaa? (Tämä on ensimmäinen php-sovellukseni (olen kyllä tottunut C ohjelmoija) ja siitä on tulossa aikamoinen "spagetti-annos". Koska teen tätä ihan harrastusmielessä en jaksaisi lähteä kirjoittamaan kaikki koodi uudestaan).

        Voiko testata jos session_start on kutsuttu?

        Toimiiko esim if(empty($_SESSION[]) session_start();?

        Olenko taas käsittänyt väärin, tuo sessio-käsite hieman hämärän peitossa, mutta eikö uuden käyttäjän sessio ala kun hän tulee ensimmäisen kerran sivuilleni ja lopu kun hän poistuu sieltä? Miksi pitää silloin jatkuvasti kutsua session_start()?

        PS. suo anteeksi nämä tyhmät kysymykset, kuten sanoin aloitin tämän php-touhun vasta äskettäin ja verkkomanualit eivät ole maailman paras lähde jos haluaa oppia jotain uutta. Pitäisi lähteä kirjastoon hakemaan jotain kirjaa, mutta minulla on jalka paketissa enkä jaksa laahautua niin pitkälle.


      • Piru
        minä (en) kirjoitti:

        tekisi ilman sinua. Nyt lähti pyörimään!

        Vielä tekninen kysymys: Seuraako mitään pahaa jos kutsuu session_start() vahingossa kaksi kertaa? (Tämä on ensimmäinen php-sovellukseni (olen kyllä tottunut C ohjelmoija) ja siitä on tulossa aikamoinen "spagetti-annos". Koska teen tätä ihan harrastusmielessä en jaksaisi lähteä kirjoittamaan kaikki koodi uudestaan).

        Voiko testata jos session_start on kutsuttu?

        Toimiiko esim if(empty($_SESSION[]) session_start();?

        Olenko taas käsittänyt väärin, tuo sessio-käsite hieman hämärän peitossa, mutta eikö uuden käyttäjän sessio ala kun hän tulee ensimmäisen kerran sivuilleni ja lopu kun hän poistuu sieltä? Miksi pitää silloin jatkuvasti kutsua session_start()?

        PS. suo anteeksi nämä tyhmät kysymykset, kuten sanoin aloitin tämän php-touhun vasta äskettäin ja verkkomanualit eivät ole maailman paras lähde jos haluaa oppia jotain uutta. Pitäisi lähteä kirjastoon hakemaan jotain kirjaa, mutta minulla on jalka paketissa enkä jaksa laahautua niin pitkälle.

        session_start() aloittaa uuden session, jos sitä ei vielä ole. Jos sessio on jo olemassa, niin se ei tee mitään. Pistät rivin aina jokaisen sivun alkuun. Ylimääräinen kutsuminen ei haittaa

        Sessio alkaa, kun session_start() kutsutaan. Sessio loppuu siinä vaiheessa, kun session avain tuhotaan palvelimella. Sen jälkeen ei auta vaikka tulisit sivuille sessio-avaimella, jos palvelimella ei ole enää vastaavaa.

        PHP erottaa käyttäjien sessiot toisistaan sillä session avaimella. Tämä taas kulkee cookiessa tai suoraan urleissa

        http://www.munservo.fi/tokasivu.php?PHPSESSID=7dd1d5d1471fa8be2fea8f163cce3257

        http yhteydessä ei ole mitään sessiota sisäänrakennettuna. Kaikki perustuu pyyntöön ja vastaukseen. Tällä sessiolla saadaan luotua tällainen keinotekoinen jatkumo.

        session_start() kutsuminen jokaisen sivun alussa siis varmistaa sen, että sessio on varmasti luotuna. Tätä voi käyttää vaikka näin.

        ekasivu.php luo käyttäjälle session ja näyttää sisäänkirjaussivun. Käyttäjä syöttää tunnuksen ja salasanan ja ne tarkistetaan tietokantaa vasten. Jos kirjaus onnistuu, niin sessioon laitetaan vaikka $_SESSION['LOGIN'] = 1;

        Käyttäjä menee sivulle tokasivu.php, jolla tarkistetaan, että käyttäjä on varmasti kirjautunut sisään. Muuten ei sivulle päästetä.

        session_start();
        if(isset($_SESSION['LOGIN'])) //Oli sessiossa
        {
        if($_SESSION['LOGIN'] == '1') //oli ok
        {
        echo "Tervetuloa!";
        }
        else //oli sessio, mutta login ei ollut ok
        {
        //redirect ekalle sivulle
        header("Location", "ekasivu.php");
        exit();
        }
        }
        else //ei ollut kirjautumista sessiossa!!!
        {
        //redirect ekalle sivulle
        header("Location", "ekasivu.php");
        exit();
        }


      • ---------
        minä (en) kirjoitti:

        tekisi ilman sinua. Nyt lähti pyörimään!

        Vielä tekninen kysymys: Seuraako mitään pahaa jos kutsuu session_start() vahingossa kaksi kertaa? (Tämä on ensimmäinen php-sovellukseni (olen kyllä tottunut C ohjelmoija) ja siitä on tulossa aikamoinen "spagetti-annos". Koska teen tätä ihan harrastusmielessä en jaksaisi lähteä kirjoittamaan kaikki koodi uudestaan).

        Voiko testata jos session_start on kutsuttu?

        Toimiiko esim if(empty($_SESSION[]) session_start();?

        Olenko taas käsittänyt väärin, tuo sessio-käsite hieman hämärän peitossa, mutta eikö uuden käyttäjän sessio ala kun hän tulee ensimmäisen kerran sivuilleni ja lopu kun hän poistuu sieltä? Miksi pitää silloin jatkuvasti kutsua session_start()?

        PS. suo anteeksi nämä tyhmät kysymykset, kuten sanoin aloitin tämän php-touhun vasta äskettäin ja verkkomanualit eivät ole maailman paras lähde jos haluaa oppia jotain uutta. Pitäisi lähteä kirjastoon hakemaan jotain kirjaa, mutta minulla on jalka paketissa enkä jaksa laahautua niin pitkälle.

        *Vielä tekninen kysymys: Seuraako mitään pahaa jos kutsuu session_start() vahingossa kaksi kertaa?*

        Ei, mutta ei hyvä. PHP antaa tuosta huomautuksen
        Notice: A session had already been started - ignoring session_start() in xxxxx

        Pistä tuo session_start() includetettavaan tiedostoon jossa on asetuksia, functioita jne... mitä nyt tarttetaankaan joka sivulla näin niitten muokkaaminen on helppoa.

        *Voiko testata jos session_start on kutsuttu?
        Toimiiko esim if(empty($_SESSION)) session_start();?*

        Tuo ei toimi koska se katsoo onko session tyhjä ja sehän on tyhjä ellei sinne tietoja ole laitettu.

        Kikkailemalla saisi jonkinmoisen, mutta ihan turhaa.

        *mutta eikö uuden käyttäjän sessio ala kun hän tulee ensimmäisen kerran sivuilleni ja lopu kun hän poistuu sieltä? Miksi pitää silloin jatkuvasti kutsua session_start()?*

        Sen takia koska kaikilla sivulla ei välttämättä tartteta sessioneita tuollee ne saa käyttöön vain niille sivuille millä tarttee. Tuo vähentää palvelimen turhaa kuormitusta. Nuo asetukset on oletuksena, mutta riippuu ylläpitäjästä mitkä asetukset palvelimel on.

        Tarvittaessa ne kyllä saa automaattisestikin toimivas esim yhteen hakemistoon.
        .htaccess tiedostoon php_value session.auto_start 1

        Saman muutoksen voi tehdä php.inistä jos sitä pääsee muokkaa.

        Katsoppas nämä jos niin näät mitä kaikkea PHP:n asetuksia pystyy muuttamaan ihan käyttäjän oikeuksillakin.

        http://fi.php.net/manual/fi/ini.php
        http://fi.php.net/manual/fi/function.ini-set.php

        Sessioni ei lopu kun poistuu sivuilta vaan se on voimassa tietyn ajan viimisestä käytöstä, olikos tunnin tai jotain. Joten jos jotain kirjaantumis tai muuta tärkeetä asiaa tekee mis tietoturvast pitää huolehtia. Niin silloin uloskirjaantumisen yhteydessä tuhotaan sessioni ja/tai tyhjennetään sen tiedot.

        Tuhoaminen
        http://fi.php.net/manual/fi/function.session-destroy.php

        Ja kuten Piru kerkes täs viestin kirjoittamisen aikana sanoa, et sessio perustuu SID tunnisteeseen. Se mahdollistaa session kaappaamisen joten kannattaa tehdä yksinöllinen varmenne esim md5(selain ip) tai jotain.

        Mureakuhan Wikistä tuosta kaappaamisest jonkin verran juttua.


      • ---------
        --------- kirjoitti:

        *Vielä tekninen kysymys: Seuraako mitään pahaa jos kutsuu session_start() vahingossa kaksi kertaa?*

        Ei, mutta ei hyvä. PHP antaa tuosta huomautuksen
        Notice: A session had already been started - ignoring session_start() in xxxxx

        Pistä tuo session_start() includetettavaan tiedostoon jossa on asetuksia, functioita jne... mitä nyt tarttetaankaan joka sivulla näin niitten muokkaaminen on helppoa.

        *Voiko testata jos session_start on kutsuttu?
        Toimiiko esim if(empty($_SESSION)) session_start();?*

        Tuo ei toimi koska se katsoo onko session tyhjä ja sehän on tyhjä ellei sinne tietoja ole laitettu.

        Kikkailemalla saisi jonkinmoisen, mutta ihan turhaa.

        *mutta eikö uuden käyttäjän sessio ala kun hän tulee ensimmäisen kerran sivuilleni ja lopu kun hän poistuu sieltä? Miksi pitää silloin jatkuvasti kutsua session_start()?*

        Sen takia koska kaikilla sivulla ei välttämättä tartteta sessioneita tuollee ne saa käyttöön vain niille sivuille millä tarttee. Tuo vähentää palvelimen turhaa kuormitusta. Nuo asetukset on oletuksena, mutta riippuu ylläpitäjästä mitkä asetukset palvelimel on.

        Tarvittaessa ne kyllä saa automaattisestikin toimivas esim yhteen hakemistoon.
        .htaccess tiedostoon php_value session.auto_start 1

        Saman muutoksen voi tehdä php.inistä jos sitä pääsee muokkaa.

        Katsoppas nämä jos niin näät mitä kaikkea PHP:n asetuksia pystyy muuttamaan ihan käyttäjän oikeuksillakin.

        http://fi.php.net/manual/fi/ini.php
        http://fi.php.net/manual/fi/function.ini-set.php

        Sessioni ei lopu kun poistuu sivuilta vaan se on voimassa tietyn ajan viimisestä käytöstä, olikos tunnin tai jotain. Joten jos jotain kirjaantumis tai muuta tärkeetä asiaa tekee mis tietoturvast pitää huolehtia. Niin silloin uloskirjaantumisen yhteydessä tuhotaan sessioni ja/tai tyhjennetään sen tiedot.

        Tuhoaminen
        http://fi.php.net/manual/fi/function.session-destroy.php

        Ja kuten Piru kerkes täs viestin kirjoittamisen aikana sanoa, et sessio perustuu SID tunnisteeseen. Se mahdollistaa session kaappaamisen joten kannattaa tehdä yksinöllinen varmenne esim md5(selain ip) tai jotain.

        Mureakuhan Wikistä tuosta kaappaamisest jonkin verran juttua.

        http://wiki.mureakuha.com/wiki/Sessioteoriaa

        http://www.hudzilla.org/phpbook/

        http://www.ohjelmointiputka.net/hak/kieli.php?PHP

        http://shiflett.org/php-security.pdf


      • vähän tietoa
        --------- kirjoitti:

        *Vielä tekninen kysymys: Seuraako mitään pahaa jos kutsuu session_start() vahingossa kaksi kertaa?*

        Ei, mutta ei hyvä. PHP antaa tuosta huomautuksen
        Notice: A session had already been started - ignoring session_start() in xxxxx

        Pistä tuo session_start() includetettavaan tiedostoon jossa on asetuksia, functioita jne... mitä nyt tarttetaankaan joka sivulla näin niitten muokkaaminen on helppoa.

        *Voiko testata jos session_start on kutsuttu?
        Toimiiko esim if(empty($_SESSION)) session_start();?*

        Tuo ei toimi koska se katsoo onko session tyhjä ja sehän on tyhjä ellei sinne tietoja ole laitettu.

        Kikkailemalla saisi jonkinmoisen, mutta ihan turhaa.

        *mutta eikö uuden käyttäjän sessio ala kun hän tulee ensimmäisen kerran sivuilleni ja lopu kun hän poistuu sieltä? Miksi pitää silloin jatkuvasti kutsua session_start()?*

        Sen takia koska kaikilla sivulla ei välttämättä tartteta sessioneita tuollee ne saa käyttöön vain niille sivuille millä tarttee. Tuo vähentää palvelimen turhaa kuormitusta. Nuo asetukset on oletuksena, mutta riippuu ylläpitäjästä mitkä asetukset palvelimel on.

        Tarvittaessa ne kyllä saa automaattisestikin toimivas esim yhteen hakemistoon.
        .htaccess tiedostoon php_value session.auto_start 1

        Saman muutoksen voi tehdä php.inistä jos sitä pääsee muokkaa.

        Katsoppas nämä jos niin näät mitä kaikkea PHP:n asetuksia pystyy muuttamaan ihan käyttäjän oikeuksillakin.

        http://fi.php.net/manual/fi/ini.php
        http://fi.php.net/manual/fi/function.ini-set.php

        Sessioni ei lopu kun poistuu sivuilta vaan se on voimassa tietyn ajan viimisestä käytöstä, olikos tunnin tai jotain. Joten jos jotain kirjaantumis tai muuta tärkeetä asiaa tekee mis tietoturvast pitää huolehtia. Niin silloin uloskirjaantumisen yhteydessä tuhotaan sessioni ja/tai tyhjennetään sen tiedot.

        Tuhoaminen
        http://fi.php.net/manual/fi/function.session-destroy.php

        Ja kuten Piru kerkes täs viestin kirjoittamisen aikana sanoa, et sessio perustuu SID tunnisteeseen. Se mahdollistaa session kaappaamisen joten kannattaa tehdä yksinöllinen varmenne esim md5(selain ip) tai jotain.

        Mureakuhan Wikistä tuosta kaappaamisest jonkin verran juttua.

        ...ennen kun ilmoitatte minua palstan seriffille:

        1) _POST muuttuja tuottaa hieman päänvaivaa. Voiko sitä käyttää ennen kun kutsuu session_start()?

        2) Miten kauan data säilyy _POSTissa? Jos minulla on lomake (tiedostossa login.php)

        ...

        sitten kaivan datan esille php:lla (koodi sijaitsee login.php-tiedoston alussa)

        $anv = _POST['anv'];

        ja kaikki toimii hyvin. Mitä jos siirryn sivulle login2.php jossa on/tai ei ole taulukkoa. Voinko sillä sivulla käyttää

        $anv = _POST['anv'];

        vaikka sivulla ei missään olisi määritelty

        (hölmösti selitetty. Mitä ajan takaa on _POST sisällön "scope" (englanniksi, onko kate suomeksi?)


      • ---------
        vähän tietoa kirjoitti:

        ...ennen kun ilmoitatte minua palstan seriffille:

        1) _POST muuttuja tuottaa hieman päänvaivaa. Voiko sitä käyttää ennen kun kutsuu session_start()?

        2) Miten kauan data säilyy _POSTissa? Jos minulla on lomake (tiedostossa login.php)

        ...

        sitten kaivan datan esille php:lla (koodi sijaitsee login.php-tiedoston alussa)

        $anv = _POST['anv'];

        ja kaikki toimii hyvin. Mitä jos siirryn sivulle login2.php jossa on/tai ei ole taulukkoa. Voinko sillä sivulla käyttää

        $anv = _POST['anv'];

        vaikka sivulla ei missään olisi määritelty

        (hölmösti selitetty. Mitä ajan takaa on _POST sisällön "scope" (englanniksi, onko kate suomeksi?)

        *1) _POST muuttuja tuottaa hieman päänvaivaa. Voiko sitä käyttää ennen kun kutsuu session_start()?*

        Voi, voit tehdä ihan mitä tahansa kunhan et tulosta mitään selaimelle echo jne....

        _POST, _GET, _COOKIE saavat tietonsa käyttäjältä sivupyynnön yhteydessä joten ne eivät tartte mitään erityis juttuja.

        *2) Miten kauan data säilyy _POSTissa?*

        Scriptin suoritusajan. Data on käytettävissä vain siinä scriptissä mille se tulee.

        *Mitä jos siirryn sivulle login2.php jossa on/tai ei ole taulukkoa. Voinko sillä sivulla käyttää

        $anv = _POST['anv'];*

        Voit, mutta muuttuja on tyhjä. Kun siirryt toiselle sivulle niin sinun pitää välittää sille jotenkin tiedot, joko tallennat ne sessioniin tai keksiin ja otat ne sieltä. Tai sitten osoitteen perässä xxx.com?tieto1=xxxxx

        Sit voit tietenkin tallentaa datan tietokantaan.... ja tarvittaessa ottaa sen sieltä. Riippuen mikä on tarkoitukseen hyvin keino.


      • Piru
        --------- kirjoitti:

        *1) _POST muuttuja tuottaa hieman päänvaivaa. Voiko sitä käyttää ennen kun kutsuu session_start()?*

        Voi, voit tehdä ihan mitä tahansa kunhan et tulosta mitään selaimelle echo jne....

        _POST, _GET, _COOKIE saavat tietonsa käyttäjältä sivupyynnön yhteydessä joten ne eivät tartte mitään erityis juttuja.

        *2) Miten kauan data säilyy _POSTissa?*

        Scriptin suoritusajan. Data on käytettävissä vain siinä scriptissä mille se tulee.

        *Mitä jos siirryn sivulle login2.php jossa on/tai ei ole taulukkoa. Voinko sillä sivulla käyttää

        $anv = _POST['anv'];*

        Voit, mutta muuttuja on tyhjä. Kun siirryt toiselle sivulle niin sinun pitää välittää sille jotenkin tiedot, joko tallennat ne sessioniin tai keksiin ja otat ne sieltä. Tai sitten osoitteen perässä xxx.com?tieto1=xxxxx

        Sit voit tietenkin tallentaa datan tietokantaan.... ja tarvittaessa ottaa sen sieltä. Riippuen mikä on tarkoitukseen hyvin keino.

        $_SESSION pitää siis sisällään ne tiedot, mitä olet itse sinne tunkenut.

        $_SESSION['nimi'] = "Pentti";

        $_GET ja $_POST pitävät sisällään sen kaman, mitä käyttäjä lähettää selaimeltaan.

        Jos käyttäjä pistää selaimen osoitekenttään
        http://www.munservo.com/skripti.php?nimi=Pentti

        niin saan skripti.php:ssä napattua tuon nimen

        $nimi = $_GET['nimi']; //Muuttujaan menee Pentti

        Lomakeelta lähetetyn tiedon saan myös $_GETistä, jos formin metodina on GET. Jos lomakkeen method="POST", niin sitten saan lomakkeelta lähetetyt tiedot $_POST kautta.

        Esimerkiksi jos sivulla on

        Saan nuo arvot $_POSTista ainoastaan skripti.php:ssä, koska sinne ne lähetetään. Nekin ainoastaan siinä tapauksessa, että skripti.php sivulle tullaan tämä lomake lähettämällä eikä suoraan kirjoittamalla selaimen osoitekenttään skripti.php


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Mihin Ilkka Kanerva kuoli?

      Kun näin jokin aika sitten kuvan riutuneen näköisestä Kanervasta, sanoin vaimolle että haimasyövältä vaikuttaa. Vaimon isä oli kuollut kyseiseen tauti
      Maailman menoa
      262
      16685
    2. Oho! Susanna Laine uudessa hiustyylissä - Julkkismeikkaajalta tiukka palaute: "Ihan sama..."

      Ex-Salkkarit tähti ja juontaja Susanna Laine on monessa mukana. Ex-missi tunnetaan pitkistä, vaaleista hiuksistaan . Mitäs tykkäät uudesta hiustyylist
      Kotimaiset julkkisjuorut
      23
      5370
    3. Ilkka kanerva

      Ilkka Kanerva kuollut 74v
      Turku
      115
      2545
    4. Yllätyspaljastus: Poppari Robin Packalen kiittää urastaan iskelmätähti Juha Tapiota: "Jos mä en..."

      Oi, mikä tarina. Juha Tapio ja Robin ovat kyllä symppiksiä molemmat. Kumpi heistä on suosikkisi? https://www.suomi24.fi/viihde/yllatyspaljastus-poppar
      Kotimaiset julkkisjuorut
      15
      2010
    5. Venäjän lippulaiva Moskva upotettu Mustallamerellä

      Venäjän laivaston lippulaiva Mustalalmerellä on 180 m pituinen, Neuvostoliiton aikana rakennettu Moskva-niminen risteilijä. Ukraina ilmoitti eilen saa
      Maailman menoa
      336
      1742
    6. Pikkaraiskan puhelut

      Mitä tuo jätkä hakee sillä että julkaisee kuinka kauan on puhunut puhelimessa? Tekee itsestään vieläkin idiootimman tuolla vai mikä tää juttu?
      Kotimaiset julkkisjuorut
      111
      975
    7. Ilkka Kanerva on kuollut

      74-vuotiaana.
      Maailman menoa
      59
      941
    8. Hossein Najaf juotti lapset humalaan ja käytti häikäilemättä hyväkseen

      Keski-Suomen käräjäoikeus on tuominnut 60-vuotiaan Hossein Najafin neljän vuoden vankeusrangaistukseen. Ensimmäisen tytön kanssa hän oli useita kerto
      Maailman menoa
      28
      849
    9. Sofia Belorf ja Sonja Aiello

      Viihtyvät yhdessä dinnerillä. Pienet piirit. Mitä ajatuksia herättää ?
      Kotimaiset julkkisjuorut
      43
      843
    Aihe