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...)
kokonaiskuva
12
816
Vastaukset
- 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
Epäily: Räppäri yritti tappaa vauvansa.
https://www.mtvuutiset.fi/artikkeli/epaily-mies-yritti-tappaa-vauvansa/9300728 Tämä on erittäin järkyttävä teko täysin p454980Onko Sanna menossa Ukrainaan viettämään vuosipäivää?
Kun on bongattu Varsovan lentokentältä?1121560Räppäri kuoli vankilassa
Ei kuulemma ole tapahtunut rikosta. Sama vahinkohan kävi Epsteinille. https://www.hs.fi/suomi/art-2000011840869.html "481089- 131033
81-vuotias Frederik avoimena - Ei omasta mielestä kelpaa tästä syystä realityihin: "Veemäinen..."
Junttidiscon kuninkaana tunnettu Frederik, 81, on esiintymislavoilla suvereeni tekijä. Mies on viihdyttänyt ympäri Suome17987Muusikko yritti tappaa kaksiviikkoisen vauvan
Karu epäily: Muusikko, 32, yritti tappaa kaksiviikkoisen vauvan Oulussa. IS:n selvityksen perusteella miestä ei ole syy75940Välillä kyllä tuntuu, että jaat vihjeitä
Mutta miten niistä voi olla ollenkaan varma? Ja minä saan niistä kimmokkeen luulemaan yhtä sun toista. Eli mitä ajatella8897Kulukusuunnat
Eikö kuhmolaiset iha oikiasti tiiä kumpi o vasen ja kumpi oikia? Tuolla ku liikennemerkissä näkyy nuolet ylös ja alas, v2832Tynkä Eläintarha ei ole enää visiitin väärti
Ähtärin MesiZoo on vajonnut alas. Näytillä olevien eläinten määrä on romahtanut lähemmäs -40%. Paikat ovat päässeet pah55742Junan alle
Kuka päätti tai yritti päättää päivänsä jäämällä junan alle ja aiheutti sen takia veturikuskille ja muille traumat..?27713