Muuttujien kuljettaminen

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
11833
Äänestä

Muut lukivat myös

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?

Äänestä
  • 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?

    Äänestä

  • Pelihuosunsa repinyt kirjoitti:

    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.

    Äänestä

  • Pelihuosunsa repinyt kirjoitti:

    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?

    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ä.

    Äänestä

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?

Äänestä
  • tuon virheen saat parannettua näin
    echo "tilulilu blaa blaa ". $_session['muuttuja'];

    Äänestä

  • Volatile kirjoitti:

    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.

    Äänestä

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?

Äänestä
  • Heh, ilmeisesti mun viestejä ei lueta täällä ollenkaan? :(

    Lukaseppas viesti "Tai sitten" löytyy tästä samasta ketjusta, siel on ratkaisu tohon ongelmaan.

    Äänestä

  • 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

    Äänestä

  • Volatile kirjoitti:

    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

    Äänestä

Kommentoi aloitusta


Pelihuosut repinyt kirjoitti:

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

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu