Pokaż wyniki od 1 do 3 z 3

Wątek: Komunikaty ezRPG

  1. #1
    Zarejestrowany
    Dołączył
    Aug 2012
    Posty
    1

    Domyślnie Komunikaty ezRPG

    Witam, ostatnio z ciekawości pobrałem ezRPG, może za jakiś czas pokuszę się nawet o próbę zrobienia czegoś na jego podstawie :P wkurzała mnie tylko jedna rzecz, przesyłanie komunikatów metodą $_GET, po co użytkownik ma widzieć w linku to co i tak zobaczy na stronie? (a jak zechce to i z nudów coś tam sobie napisze :P) więc pierwsza próba była ze zmiennymi sesyjnymi no ale tu coś mi ciągle nie grało tak jak powinno, więc idąc po najlżejszej linii oporu doszedłem do wniosku że można to przecież zapisać do ciasteczka, odczytać a następnie takie ciasteczko wywalić. Wiadomo ma to swoje wady, np. użytkownik może mieć w przeglądarce zablokowane zapisywanie ciasteczek, a i parę innych pewnie się znajdzie :P

    Poniżej przykład jak to zrobić:
    1. Otwieramy plik: /hooks/header_msg.php
    Wygląda to mniej więcej tak:
    Kod php:
    <?php
    defined
    ('IN_EZRPG') or exit;

    $hooks->add_hook('header''header_msg'1);

    function 
    hook_header_msg(&$db, &$tpl, &$player$args 0)
    {
        global 
    $purifier;
        
        if (isset(
    $_GET['msg']) && is_string($_GET['msg']))
        {
            
    $_msg trim(stripslashes($_GET['msg']));
            
    $_msg $purifier->purify($_msg);
            if (!empty(
    $_msg))
                
    $tpl->assign('GET_MSG'$_msg);
        }
        
        return 
    $args;
    }
    ?>
    2. Zmieniamy na:
    Kod php:
    <?php
    defined
    ('IN_EZRPG') or exit;

    $hooks->add_hook('header''header_msg'1);

    function 
    hook_header_msg(&$db, &$tpl, &$player$args 0)
    {
        global 
    $purifier;
        
    /*sprawdzamy czy ciasteczko istnieje*/
        
    if (isset($_COOKIE['msg']) && is_string($_COOKIE['msg']))
        {
            
    $_msg trim(stripslashes($_COOKIE['msg']));
            
    $_msg $purifier->purify($_msg);
            if (!empty(
    $_msg))
                
    $tpl->assign('GET_MSG'$_msg);
        
    /*usuwamy ciasteczko*/
                
    setcookie("msg"""time());
        }
        
        return 
    $args;
    }
    ?>
    Połowa pracy za nami pozostało tylko zmienić kilka linijek w plikach w katalogu modules, poniżej co i jak na przykładzie logowania.

    1. Otwieramy plik /modules/Login/index.php, następnie zjadujemy:
    Kod php:
    header('Location: index.php?msg=' urlencode($msg)); 
    2. Zmieniamy to na:
    Kod php:
    header('Location: index.php'); 
    3. Dodajemy pustą linie przed powyższym, i wpisujemy w niej:
    Kod php:
    setcookie("msg"$msg); 
    Analogicznie do tego przerabiamy pliki pozostałych modułów. Może komuś się to przyda.
    pozdrawiam arti

  2. #2
    Zasłużony Awatar Rodkan
    Dołączył
    Mar 2011
    Posty
    1,465

    Domyślnie

    Zamiast GET nie lepiej to po prostu zrobić POST?

  3. #3
    Programista Awatar Aravorn
    Dołączył
    Apr 2011
    Posty
    343

    Domyślnie

    Metoda GET nie $_GET - $_GET to tablica elementów przesłanych metodą GET.

    Widać tu jedną z ważniejszych wad tego silnika: błędna hermentyzacja kodu - wystarczy pomyśleć dlaczego, a dostrzeże się m. in. nadmiar kodu odpowiadającego za to samo. Nie trzeba przeglądać nic poza tymi fragmentami, żeby to stwierdzić I świetny przykład na to, że programowanie zorientowane obiektowo (bo tutaj to jest tylko używanie gdzie niegdzie jakichś klas) rozwiązałoby idealnie ten problem.

    Blokowanie ciasteczek: jeżeli wyświetlasz komunikaty z gry, to nie jest do końca uchybienie - możesz np. sprawdzać obecność włączonej obsługi JavaScript na dużo wcześniejszym etapie, np. przy logowaniu. I właśnie tu może powstać problem, którego Twoje rozwiązanie w żaden sposób nie rozwiąże - jeżeli ktoś ma wyłączony JS nie zobaczy informacji o błędnych danych itd. (możesz np. ukryć formularz logowania i pokazywać go dynamicznie - wiem o takiej możliwości, ale załóżmy, że złośliwy gracz bez JS zmodyfikuje lekko stronę i wyśle to żądanie).
    GET - widoczność komunikatów - dobrze że kombinujesz - tego być na pewno nie powinno. Rodkan - POST w tym przypadku również dobrym rozwiązaniem do końca nie będzie, a przynajmniej nie będzie szybki Bo musiałbyś kombinować z nagłówkami albo np. cURLem (jak inaczej zamierzasz przesłać dane podczas wykonywania jednego skryptu do innego, nie mogąc załączyć danego pliku przez include / require?), ale wtedy zapewne pojawi się: Warning: headers already sent by.., będzie trzeba stosować bufor, który spowolni całość lub bawić się z kodowaniem.
    Osobiście poleciłbym w tym przypadku, z racji iż pewnie za dużo roboty byłoby z przerabianiem całości zmienne danej sesji. Możesz napisać, w czym miałeś problem - da się go na pewno rozwiązać, bo rozwiązanie z wykorzystaniem sesji jest dużo prostsze niż ciasteczka

    więc idąc po najlżejszej linii oporu doszedłem do wniosku że można to przecież zapisać do ciasteczka
    I tu następna sprawa: nie każda przeglądarka ma w danej chwili włączone ciasteczka, o czym sam napisałeś - ktoś mógł je np. zablokować na danej stronie (autoryzacja na sesji dalej powinna działać). I co wtedy? Problem. Jaki? Ano użytkownik się nawet tego nie dowie - nic przecież nie zobaczy
    Powiem Ci, że miałeś szczęście albo wiedzę, że to działa w związku z tymi nagłówkami.

    No i odnośnie tej najmniejszej linii oporu - po co prezentujesz w takim razie to rozwiązanie, które jest gorsze nawet od wykorzystania metody GET? Jeżeli się publikuje jakieś własne rozwiązanie, wypadałoby, żeby w jakimś stopniu poprawiało m. in. bezpieczeństwo skryptu, optymalizowało. Znając, jak to napisałeś rozwiązanie lepsze, olać je, a opisać właściwie dłuższe i gorsze - tak się nie robi

Informacje o wątku

Użytkownicy przeglądający ten wątek

Aktualnie 1 użytkownik(ów) przegląda ten wątek. (0 zarejestrowany(ch) oraz 1 gości)

Podobne wątki

  1. ezRPG i PDO
    Przez Rysh w dziale Użytkowanie I Modyfikacje
    Odpowiedzi: 12
    Ostatni post / autor: 06-04-2012, 11:53
  2. [ezRPG 1.0.1]Spolszczenie
    Przez eXXXu w dziale Kosz
    Odpowiedzi: 0
    Ostatni post / autor: 13-07-2011, 12:03
  3. [ezRPG 1.0.1] Spolszczenie (bez instalacji)
    Przez marcin0321 w dziale Spolszczenia
    Odpowiedzi: 0
    Ostatni post / autor: 10-05-2011, 14:01
  4. [ezRPG 1.0.1] Spolszczenie Instalacji
    Przez Alson w dziale Spolszczenia
    Odpowiedzi: 2
    Ostatni post / autor: 01-10-2010, 17:45
  5. Komunikaty z html/php
    Przez Armed79 w dziale Budowa gry via www
    Odpowiedzi: 3
    Ostatni post / autor: 04-08-2009, 09:09

Zakładki

Uprawnienia umieszczania postów

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •