Support » Ohjeet ja vianmääritys » Sessiot eivät välity sivujen kesken

  • mudwaynethemagician

    (@mudwaynethemagician)


    Hei vain.

    Aloin käyttää WordPressiä vasta hiljattain. Kaikki sujui aluksi hyvin, mutta nyt olen törmännyt ongelmaan, jota en osaa itse ratkaista. Minulla on kaksi WordPress-asennusta palvelimella: (1) root-kansiossa, (2) /members/-kansion takana. Jälkimmäisen on tarkoitus olla vain sivuston jäsenille suunnattu sivusto, jonka sisältöön pääsee käsiksi vain kirjautumalla sisään. PHP-sessio ei kuitenkaan välity WP-asennusten välillä.

    (1)-sivulla on sisäänkirjautumislomake, jonka kautta pääsee /members/-kansioon käyttäjänimellä ja salasanalla. Jos tunnukset ovat oikein, määritellään $_SESSION[”user”] = $username, ja siirrytään /members/-kansioon.

    (2)-sivulla, header.php:ssa, on ensimmäisellä rivillä:

    session_start();
    if (!isset($_SESSION["user"])) {
        ...
    }

    Koodin on tarkoitus pitää asiattomat vierailijat poissa jäsensisällöstä. Ongelma kuitenkin on, ettei vierailija näe koskaan sisältöä, sillä isset(…) on aina false.

    Tietääkö kukaan, mikä tässä menee pieleen?

Esillä 7 vastausta, 1 - 7 (kaikkiaan 7)
  • Moderator Sami Keijonen

    (@samikeijonen)

    Eikö olisi selkeintä asentaa members-kansiossa olevaan WP:hen lisäosa, joka hoitaa asian.

    http://wordpress.org/extend/plugins/private-only/

    Tai Members, jos tarvitsette käyttäjien hallintaa samalla.
    http://wordpress.org/extend/plugins/members/

    Thread Starter mudwaynethemagician

    (@mudwaynethemagician)

    Tuo ei vastannut kysymykseeni. Haluaisin käsitellä sessioita itse, joten onko mahdollista normalisoida sessioiden käyttäytyminen WordPress-asennusten välillä?

    Moderator Sami Keijonen

    (@samikeijonen)

    Ei niin, mutta antoi kenties vaihtoehtoisen tavan miten WP toimii.

    Hakusanalla sessions in wordpress löytyy paljon infoa sessioista. Selvennätkö vielä miksi tarvitset juuri sessioita tilanteen ratkaisemiseen.

    Thread Starter mudwaynethemagician

    (@mudwaynethemagician)

    Tutkin sessioilla, onko käyttäjä kirjautuneena sivustolle. Jos ei ole, hänellä ei myöskään ole mitään asiaa /members/-kansioon. Tietenkin tämän voisi tehdä cookieseilla, mutta olen tykästynyt sessioihin niiden helppouden takia.

    Moderator Sami Keijonen

    (@samikeijonen)

    WordPress ei käytä sessioita, joten en oikein osaa vastata tarkemmin. Todennäköisesti teeman header.php on kuitenkin liian myöhäinen ajankohta aloittaa sessio. Kokeile vaikka aloittaa sessio init-koukulla. Jotain tällaista voi kokeilla lisäosan tai teeman functions.php tiedostossa.

    add_action( 'init', 'my_session' );
    
    function my_session()
    {
    	// tähän session aloituskoodit
    }

    Itse käytän WP:n valmista is_user_logged_in()-funktiota tai yllämainittuja lisäosia.

    http://codex.wordpress.org/Plugin_API/Action_Reference
    http://codex.wordpress.org/Function_Reference/is_user_logged_in

    Thread Starter mudwaynethemagician

    (@mudwaynethemagician)

    Kiitos avustasi. Ongelma ei ole vielä harmiksi ratkennut. Kai nyt puhumme varmasti samasta asiasta, eli sivuston ulkopuolisista käyttäjistä, jotka voivat kirjautua sisään. En tarkoita vierailijoita, jotka voivat kirjautua WordPress’iin sisään vaan vierailijoita, joille on oma käyttäjätietokanta.

    Tutustun mainitsemiisi lisäosiin, mutta voisitko selvittää hieman, että miksi eivät evästeetkään toimi.

    Rakenne on sama. Ensimmäisen WordPress-asennuksen sivusto sisältää kirjautumislomakkeen, jota käsittelee kirjautuminen.php. Ko. tiedosto suorittaa komennot:

    setcookie("kayttaja", $usernam, 0, "/")
    die();

    Tämän jälkeen käyttäjällä on mahdollisuus klikata itsensä joko käyttäjäsivulle /members/, jossa toinen WP-asennus sijaitsee, tai palata takaisin julkiselle sivulle.

    /members/-asennuksen header.php tarkistaa keksin olemassaolon, ja päättelee, pitääkö käyttäjää päästää näkemään sisältöä.

    Jostain syystä keksi ei kuitenkaan asetu. PHP:n versio on 5.3. Keksi asettuu aivan normaalisti WP:n ulkopuolella testattuna, mutta ei tässä systeemissä.

    Osaisitko sanoa, mikä on vikana?

    Moderator Sami Keijonen

    (@samikeijonen)

    En tarkoita vierailijoita, jotka voivat kirjautua WordPress’iin sisään vaan vierailijoita, joille on oma käyttäjätietokanta.

    WordPressiin ei voi kirjautua kuin he, joilla luodaan oma käyttäjätietokanta. Joko käyttäjälle annetaan rekisteröitymismahdollisuus tai sitten admin tekee tarvittavat käyttäjätunnukset. Käyttäjän tiedot tallentuvat *_users ja *_usermeta taulukoihin. Vastaavasti esim. Members-lisäosalla hallitaan mitä käyttäjät saavat tehdä. Tai tarkemmin sanottuna mitä mikäkin rooli saa tehdä ja käyttäjät kuuluvat aina johonkin rooliin.

    Mutta itse kysymykseen en taaskaan osaa vastata. Ensimmäinen vinkki on se, että käytä aina kuin mahdollista WP:n omia funktioita ja API-systeemiä.
    Esim.
    http://codex.wordpress.org/Function_Reference/wp_set_auth_cookie

    http://codex.wordpress.org/Customizing_the_Login_Form#Make_a_Custom_Login_Page

    http://digwp.com/2010/12/login-register-password-code/

    Itse yksinkertaistaisin prosessia enkä tekisi kirjautumislomaketta root-kansion WP:hen, kun eivät ole siihen WP:n asennukseen kirjautumassa.

Esillä 7 vastausta, 1 - 7 (kaikkiaan 7)
  • The topic ‘Sessiot eivät välity sivujen kesken’ is closed to new replies.