Terve,
Eli mulla on semmoinen ongelma, että en tiedä miten saisin muuttujia kuljetettua sivulta toiselle. Tietenkin form tyylillä saa muuttujia menemään, mutta silloin kait ne pitää aina lukea jostain textboxista jne. ihan sama se ei oo nyt pääasia.
Haluaisin lisätietoa sessiosta, kyllä kyllä olen lukenut googlella tietoa ja sitä on tullut luettua ihan riittävästi. Projektin nimi on se, että käyttäjä kirjautuu sivulla index.php joka tarkistaa mysql:stä tunnuksen ja salasanan. Tämän jälkeen käyttäjä siirretään toiselle sivulle, jossa hän näkee kaikenlaista infoa itsestään.
Nyt vain on se ongelma, että ainot tapa miten saan $tunnus muuttujan kulkemaan toiselle sivulle on
Eli mulla on semmoinen ongelma, että en tiedä miten saisin muuttujia kuljetettua sivulta toiselle. Tietenkin form tyylillä saa muuttujia menemään, mutta silloin kait ne pitää aina lukea jostain textboxista jne. ihan sama se ei oo nyt pääasia.
Haluaisin lisätietoa sessiosta, kyllä kyllä olen lukenut googlella tietoa ja sitä on tullut luettua ihan riittävästi. Projektin nimi on se, että käyttäjä kirjautuu sivulla index.php joka tarkistaa mysql:stä tunnuksen ja salasanan. Tämän jälkeen käyttäjä siirretään toiselle sivulle, jossa hän näkee kaikenlaista infoa itsestään.
Nyt vain on se ongelma, että ainot tapa miten saan $tunnus muuttujan kulkemaan toiselle sivulle on
Vastaukset 11
Vanhimmat
Lyhyesti ja yksinkertaistetusti...
tee sessio-taulu, johon tulee käyttäjä-id ja
sessio-id.(voimassaoloaikakin on kiva)
Kun käyttäjä on tunnistettu, arvo sopivan pitkä
sessio-id ja tallenna se ja käyttäjä-id äskeiseen
tauluun.
Sen jälkeen kuljetat vain session-id:tä sivulta toiselle. Kun se on tarpeeksi pitkä ja satunnainen, niin sen arvailu kestää liian kauan, jotta sitä kautta saisi toisten käyttäjien tietoja selville.
COOKIE, POST tai URL ovat tavat, joilla voit kuljettaa tuota session-id sivulta toiselle.
Ja kun se data kulkee palvelimelta-selaimelle http:n yli niin sen lukitseminen ei onnistu.
(tai onnistuuhan se - pitää vaan tehdä oma selain sitä hommaa varten)
Olikohan tästä yhtään apua?
Eipä juuri auttanut kun en tiedä oikeastaan mitään sessiosta. Ja jos toteutan sen tällä tavalla eli alan kuljettamaan jotain checksummii tai vastaavaa urlissa menee koko koodi uusiksi.
Kaikkein helpoimmalla selviän kun joku vaan kertoo miten jonkun muuttujan saa rekisteröityä globaaliksi siten, että sitä ei voi muuttaa.
Olen tehnyt myös näin $pass = md5($salasana);
eli voisin kuljettaa tätäkin arvoa ympäri ämpäri, mutta kun ei kulje tunnus muuttuja niin ei kulje tämäkään. En myöskään jaksa uskoa, että joka kerta pitäisi tämä $pass muuttuja käydä hakemassa esim. myslistä.
LYHYESTI: Miten se muuttuja rekisteröidään globaaliksi?
PHP:ssä ei saa tavallaan muuttujia globaaliksi, vaan arvot on kuljetettava sessionissa, keksisä tai urlissa
Eihän se koko koodi mene uusiksi ton sessionin takia, jos menee niin huonosti toteutettu.
Yksinkertaisimmillaan koodin alkuun session_start();
ja
$_SESSION['pass'] = 'xxx';
Tämän jälkeen sinulla on sessionissa tallessa pass arvo jonka saat esiin millätahansa sivulla
$_SESSION['pass'] tietenkin voit tehdä $pass = $_SESSION['pass']; jolloin pääset helpommalla.
Eikä sessionin arvoa ole pakko kuljettaa urlissa, vaan se menee keksessäkin automaattisesti, tosin jos keksit estetty niin kirjaantuminenkaan ei toimi.
Käyttäjä ei voi muuttaa sessionissa olevaa arvoa, koska se on palvelimella, tosin sessionin voi kaapata, jonka takia on parempi tehdä vähän monimutkasemmin, mikäli vaaditaan tietoturvaa.
Esim
sinulla on myslissä id | käyttis | salasana
lisäät siihen yhden kentän vaikkapa xx
kun kävijä kirjaantuu sivuillesi tarkistat onko tunnukset oikein, jos on niin lisäät xx kenttään
md5(md5(tunnus salasana) ip_osoite selain)
Tallennat sessioniin md5(tunnus salasana) tuloksen.
Tämän jälkeen tarkistat vain sivun alussa löytyykö myslistä tämmöstä xx tunnistetta md5($_SESSION['xx'] ip_osoite selain)
Tällöin sessionia ei pysty kovin helpolla kaappaamaan, kun pitää olla sama ip-osoite sekä selain.
Toi eka on vain esimerkki, jota ei oikein kannata käyttää, salasana pitää olla aina salattu jotenkin.
Kuinkahan tämän nyt hienosti asettaisi.
Tuonkaltaista muuttujaa ei ole mahdollista
asettaa sellaiseen tilaan etteikö sitä saisi muutettua. Täytyy vaihtaa Javaan tai vastaavaan ;)
Oletkin varmaan jo tämän selannnut :
http://fi.php.net/manual/en/ref.session.php
Pieni rautalanka loppuun...
muuttujia saat kuljetettua seuraavasti :
login.php -> käyttäjän tunnistus
--> kutsutaan index.php?tunnus=foobar
index.php:ssä saat tuon tunnuksen käyttöösi näin
$kuljetettu_tunnus = $_GET['tunnus'];
Jos käytät formia sen kuljettamiseen niin :
$kuljetettu_tunnus = $_POST['tunnus'];
tai
$kuljetettu_tunnus = $_COOKIE['tunnus'];
tai
$kuljetettu_tunnus = $_SESSION['tunnus'];
tästä lisää yo. linkistä.
Sain ongelman ratkaistua käyttämällä sessionia.
Ehdottomasti oli helpoin tapa.
Tuli siinä vielä semmoinen vastaan, että jos haluan sen muuttujan johonkin "lauseeseen" esim.
echo" Tilulilu blaa blaa $muuttuja" niin tarvitseeko tosiaan ensin tehdä näin:
$muuttuja = $_SESSION['muuttuja'];
ainakin aina kun olen yrittänyt pistää, että:
echo "tilulilu blaa blaa $_session['muuttuja'] saan virhe ilmoituksen. Pitäisikö kuitenkin toimia näin?
tuon virheen saat parannettua näin
echo "tilulilu blaa blaa ". $_session['muuttuja'];
Laitat muuttujan aaltosulkeisiin
echo "tilulilu blaa blaa {$_session['muuttuja']} jihaa";
Noi aaltosulkeet on PHP:n suositus nykyään, sillä pystyy estämään myös ettei PHP ole muuttujien kanssa liian ahne.
esim
$x = 9;
echo "$xn"; // ei toimi
echo "{$x}n"; // toimii
Volatilen tapaa voi parantaa näin
echo 'tilulilu blaa blaa '. $_session['muuttuja'];
Näin saadaan hitusen nopeempa koodista, tosin pienissä scripteissä ihan sama kummin tekee.
Että jos haluan muuttujan perään heti merkin eli siis vaikkapa tulokseksi 100Mt kun muuttuja on 100. Ei onnistu ainakaan $muuttujaMt sehän on ihan selvä, mutta miten saisin sen silleen hienosti? yks vaihtoehtohan on käyttää jotain toista muuttujaa ja sitte trim, mutta onko jotain "sievempää" keinoa?
Heh, ilmeisesti mun viestejä ei lueta täällä ollenkaan? :(
Lukaseppas viesti "Tai sitten" löytyy tästä samasta ketjusta, siel on ratkaisu tohon ongelmaan.
Jos et echoakaan niitä rivejä vaan printtaat
html:n php-tagien ulkopuolella.
Tapoja on monia ja kukin tyylillään ;)
Esim.
Esim. Nimi :
Tiedoston koko : Mt
Olen tästäkin hieman erimieltä kanssasi. Tapa on ihan hyvä, mutta ei lyhkäset PHP alotukset. Toki säästyy muutaman merkin kirjoittamiselta, mutta kun scriptin siirtää palvelimelle, missä ei toimikkaan lyhkäset aloitukset, niin aikaa menee enemmän kuin säästi.
Joten ennemmin