Tworząc studioGallery napotkałem na pewien problem związany z zabezpieczeniem pliku, który zapisuje dane do bazy. Zakładając, że tradycyjna sesja w PHP trwa 180 sekund (3. minuty), a napisanie tekstu (artykułu) często może zająć więcej czasu, zacząłem szukać innego sposobu przekazania klucza, który byłby zgodny z tym, zapisanym w sesji.
Tradycyjna metoda polega na wstawieniu ukrytego pola formularza z wartością równą wygenerowanemu kluczowi, i zapisaniu do sesji takiej samej wartości.
W pliku docelowym sprawdzamy przekazany klucz z formularza z wartością sesji i jeśli są równe, wykonujemy dalszą część kodu. Jednak jeśli na stronie będziemy przebywać więcej, pisząc np. bardzo długi artykuł, sesja w PHP wygaśnie i nie będzie zgodna z wartością pola formularza.
Rozwiązanie tego problemu jest bajecznie proste. Wystarczy utworzyć jakiś plik PHP, którego zadaniem będzie wygenerowanie klucza, zapisanie go do sesji i wyświetlenie jego wartości.
Teraz z pomocą przychodzi jQuery.
Przed przesłaniem formularza do pliku, który zapisuje dane do bazy, metodą GET łączymy się z plikiem, pobieramy wartość klucza, podstawiamy do zmiennej i przesyłamy dalej formularz metodą POST.
W efekcie za każdym razem, kiedy będziemy przesyłali dane z formularza, skrypt wcześniej będzie pobierał aktualną wartość klucza, którą równocześnie zapisywać będzie do sesji, co będzie równoznaczne z tym, że klucz zawsze będzie taki sam, jak ten w sesji.
Przykładowy wygląd skryptu jQuery może mieć następującą postać:
$.get('plik_generujacy_klucz.php', function(sResopnse) { var key = sResponse; var dane_z_formularza = $('#nasz-formularz').serialize()+'&key='+key; $.post('plik_do_zapisu_danych.php', dane_z_formularza, function() { // dalsza część kodu po przesłaniu danych... }); });
Oczywiście, zamiast przesyłać go metodą POST, można dodać go po adresie jako wartość GET.
Należy jednak pamiętać, że nie zwalnia nas to od przefiltrowania pól formularza i usunięcia ewentualnej niepotrzebnej treści. Nie zalecałbym tej metody w przypadku dodawania komentarzy, gdyż może to zwiększyć ilość spamu (choć wcale nie musi).
Sposób, który opisałem tyczy się raczej panelu administracyjnego i służyć ma jedynie użytkownikom, którzy potrzebują dużo czasu na dodanie treści na stronę, a w przypadku tradycyjnej metody przesyłania wartości KLUCZA, ograniczani byli 3.minutową żywotnością sesji.
Często bowiem spotykałem się z sytuacjami, że pisząc jakiś post, news, czy artykuł musiałem dość często stosować metodę ctrl+a, ctrl+c, ctrl+v, gdyż zdarzało się, że po przesłaniu formularza witał mnie tekst z informacją, że wykonałem niedozwoloną operację, bowiem mój klucz sesji wygasł i nie był zgodny z wartością przesyłaną przez formularz.
Opisałem zatem prosty sposób na rozwiązanie tego problemu.


