Výsledky 1 až 6 z 6

Téma: [PHP] jazykové mutace přes SESSION

  1. #1

    Standardní [PHP] jazykové mutace přes SESSION

    Ahoj, pokouším se dělat stránky s několika zakykovými mutacemi. Doposud jse je dělal přes url adresy a pomocí mod_rewrite. Problém je ale v tom že někdo chce jednojazyčné stránky, někdo zase vícejazyčné. Když vytvořím třeba aktuality pro vícejazyčný web a potřebuju ho použít jen pro jednojazyčný, tak ho musím kompletně ošetřit, tzn. všechny proměnné ve kterých mám překlady vyhodit a napsat to tam na tvrdo. Nebo aktuality nechat pro vícejazyčný web, ale v url adrese bych musel pořád udržovat /cs/, aby se mi do proměnných načítal český text. Napadlo mě proč to neudělat přes session. Sice hledání chyb bude zřejmě složitější, ale mělo by to vyřešit můj problém.

    Napsal jsem si kod, který by měl do $_SESSION vložit aktuální jazyk. Chci se zeptat zkušenějších programátorů, zda by to tak mohlo být nebo by kód napsali jinak?

    session_start();
    if(isset($_GET["lg"])):
    $_SESSION["lg"] = $_GET["lg"];
    elseif(!isset($_SESSION["lg"])):
    $_SESSION["lg"] = explode(",",$_SERVER['HTTP_ACCEPT_LANGUAGE']);
    $_SESSION["lg"] = strtolower(substr(chop($_SESSION["lg"][0]),0,2));
    elseif(($_SESSION["lg"]<>"cs")&&($_SESSION["lg"]<>"de")&&($_SESSION["lg"]<>"en")):
    $_SESSION["lg"]="en";
    endif;
    require("config".$_SESSION["lg"].".php"); //nahraje se config s aktualni mutaci

  2. #2

    Standardní Re: [PHP] jazykové mutace přes SESSION

    Tak zrovna jazykové mutace jsou docela typický případ pro sessions, vídám to celkem běžně.
    Ale ten poslední řádek je cesta do pekla.
    Jde o to, že děláš include souboru a nemáš ošetřené, co tam vlastně vkládáš. U tebe je to částečně ošetřené tím prefixem 'config', ale představ si, že by tam ten config nebyl a uživatel by ti v GETu předal adresu svého skriptu. Pokud by bylo povolené vkládání skriptů z URL (viz allow_url_fopen), tak je na bezpečnostní průšvih zaděláno.
    Celkově je tohle jeden ze základních bezpečnostních problémů PHP webů, silně doporučuju to buď nějak ošetřit, nebo udělat switch/case a includovat cesty natvrdo.

    Edit: Ošetřit by to šlo třeba i tak, že ten poslední elseif předěláš na if, tj. ta kontrola proběhne i když uživatel předá něco v GETu. Možností je samozřejmě víc.
    Naposledy upravil peshwood; 16.04.2009 v 00:35. Důvod: Dodatek ke kódu

  3. #3
    Member Avatar uživatele l_iNu$
    Založen
    22.10.2006
    Bydliště
    Šalingrad (Brno)
    Příspěvky
    125
    Vliv
    216

    Standardní Re: [PHP] jazykové mutace přes SESSION

    Já bych se ukládání jazyku do session vyhnul, přece jen když někomu pošlu odkaz tak očekávám že tam uvidí stejný obsah, takhle pokud má nastaven jiný jazyk v prohlížeči… a i vyhledávače by mohly zaindexovat jen jednu jazykovou verzi. Lepší přenášet v URL.

  4. #4
    Administrátor mince Avatar uživatele Jezevec
    Založen
    08.10.2002
    Bydliště
    Teplice
    Příspěvky
    6 736
    Vliv
    300

    Standardní Re: [PHP] jazykové mutace přes SESSION

    Jen k ty bezpecnosti, to neni zdaleka jen problem PHP, to je problem naprosto obecnej. Proste nikdy nikde nesmis pouzit v kodu promenou, jejiz obsah muze uzivatel menit. Respektive, nesmis ji pouzit primo. Muzes trebas misto case (coz v pripade desitek/stovek variant je metoda ponekud neschodna a hlavne neudrzovatelna) hrabnout do dany cesty, nacist co tam je a to porovnat s tim co by uzivatel chtel.

    Co se mutaci tejce, sem za link na konkretni jazyk. Problem totiz nastane, kdyz nekdo vlozi link na konkretni stranku a (celkem logicky) ocekava, ze cilova osoba to uvidi tak jak to videl on. Kdyz se pak dotycnemu (kvuli jinemu nastaveni prohlizece/proxy/... ) zobrazi neco jineho, vypada to hloupe.
    IMPROBE AMOR, QUID NON MORTALIA PECTORA COGIS - krutá jsi, lásko, kam až ty doženeš smrtelná srdce -- Vergilius
    Mnoho je prostředků, které léčí lásku, ale žádný není spolehlivý.
    S tím, čeho se na nás dopustili druzí se už nějak vyrovnáme. Horší je to s tím, čeho jsme se na sobě dopustili sami.
    -- Francois La Rochefoucauld
    Nabídnout přátelství tomu, kdo chce lásku, je jako dát chleba tomu, kdo umírá žízní.

  5. #5

    Standardní Re: [PHP] jazykové mutace přes SESSION

    Podle by bylo nejjednodussi pouzit mod_rewrite.

    Udelas pravidlo, abys mel odkaz ve tvaru

    www.domena.cz/cz/index.php, coz ve skutecnosti bude www.domena.cz/index.php?lang=cz

    Vyhoda je, ze se ti odkazy budou samy prevadet na odkaz s konkretni jazykovou mutaci.
    (kdyz v index.php bude odkaz na page.php, tak jelikoz se mu bude zdat, ze je ve slozce cz, tak to udela korektni odkaz na /cz/page.php)

  6. #6
    Member Avatar uživatele l_iNu$
    Založen
    22.10.2006
    Bydliště
    Šalingrad (Brno)
    Příspěvky
    125
    Vliv
    216

    Standardní Re: [PHP] jazykové mutace přes SESSION

    Ono je vůbec nejlepší používat nějaký chytře navržený framework, třeba v Nette frameworku je tohle otázka dvou řádků kódu → definovat parametr $lang a označit ho za persistentní, tedy všechny odkazy budou tento parametr přenášet.

Informace o tématu

Users Browsing this Thread

Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)

Podobná témata

  1. [PHP] SESSION ve funkci
    Založil Miiisa v sekci fóra Programování
    Odpovědí: 6
    Poslední příspěvek: 07.06.2005, 11:35
  2. [PHP] session cookies IE6 - vypadavaji session
    Založil Petano v sekci fóra Programování
    Odpovědí: 1
    Poslední příspěvek: 25.09.2004, 00:35
  3. [PHP] mazani session
    Založil Nicx v sekci fóra Programování
    Odpovědí: 2
    Poslední příspěvek: 28.02.2004, 19:01
  4. [PHP] Lze zjistit zda je daná session stále aktivní?
    Založil Dawn v sekci fóra Programování
    Odpovědí: 0
    Poslední příspěvek: 30.01.2004, 23:42

Klíčová slova k tématu

Pravidla přispívání

  • Nemůžete zakládat nová témata
  • Nemůžete zasílat odpovědi
  • Nemůžete přikládat přílohy
  • Nemůžete upravovat své příspěvky
  •