Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Kontynuacja akcji POST po zalogowaniu
markonix
post
Post #1





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


W jaki sposób rozwiązujecie wymuszenie logowania w momencie wykonania jakiejś akcji.
Przykładowo "Dodaj komentarz" -> przekierowuje do /login, logowanie przebiega pomyślnie i w jaki sposób powtórzyć wysłanie komentarza.

W przypadku GET jest dosyć prosto - po prostu po zalogowaniu robimy redirect na url wyjściowy.
Przy POST już tak prosto nie jest.

Sesja? Pola hidden?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
timon27
post
Post #2





Grupa: Zarejestrowani
Postów: 578
Pomógł: 69
Dołączył: 15.04.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Przeładowanie bez zmiany adresu.
1plik wysyła dane do 2plik.

W 2plik zamieszczam:

  1.  
  2. if($zalogowany){
  3. //normalny kod
  4. }else{
  5. //formularz logowania na ajax.
  6. //po poprawnym zalogowaniu odświeża stronę
  7. }


Ten post edytował timon27 31.08.2013, 16:28:11
Go to the top of the page
+Quote Post
markonix
post
Post #3





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Nie rozumiem nic z Twojego postu.

Jakie odświeżenie strony? Przecież po odświeżeniu tablica POST będzie pusta.
Go to the top of the page
+Quote Post
jackraymund
post
Post #4





Grupa: Zarejestrowani
Postów: 217
Pomógł: 21
Dołączył: 10.06.2011
Skąd: Głogów

Ostrzeżenie: (0%)
-----


Ja bym w hidden załadował 2 pola
action i data

Ten post edytował jackraymund 1.09.2013, 12:44:37
Go to the top of the page
+Quote Post
markonix
post
Post #5





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Dobra, widzę, że coraz większy poziom "rozwiązań" się pojawia.

Dla potomnych moje rozwiązanie (CodeIgniter).

Sprawdzamy czy nie ma jakiejś zapisanej akcji.
Jeżeli jest to przypisujemy do POST czyli symuluje jakby POST był wysłany ponownie.
Koniecznie kasujemy żeby potem się gdzieś przypadkiem ponownie nie wywołało.

Przy normalnym wysłaniu żądania sprawdzamy czy zalogowany.
Jeżeli nie to zapisujemy akcje i robimy normalnie logowanie.
Po logowaniu musi tylko wrócić na stronę i wykonuje się powyższy akapit.

Dla normalnego wywołania (zalogowanego) nic się nie dzieje nietypowego więc rozwiązanie jest dość transparentne.


  1. /* Checks logged now? */
  2. $saved_action = $this->session->userdata('saved_action');
  3. if (!empty($saved_action))
  4. {
  5. $post = $saved_action['post'];
  6. $this->session->unset_userdata('saved_action');
  7. }
  8. else
  9. {
  10. $post = $this->input->post(NULL, TRUE);
  11. }
  12.  
  13. /* Cart or Wish list */
  14. if ($post)
  15. {
  16. if (empty($this->data['logged']))
  17. {
  18. /* not logged so store action and go to login page */
  19. $this->save_post_action('design', $post); // Back URL and DATA
  20. $this->check_access(); // Redirect
  21. }
  22. else
  23. {
  24. if (isset($post['add_wish']))
  25. {
  26. $this->load->model('account_model');
  27. $this->account_model->add_wish($this->logged_id, $post['item_id'], $post['size']);
  28. redirect('account/wishlist');
  29. }
  30. }
  31. }


Ten post edytował markonix 1.09.2013, 17:09:03
Go to the top of the page
+Quote Post
timon27
post
Post #6





Grupa: Zarejestrowani
Postów: 578
Pomógł: 69
Dołączył: 15.04.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Cytat(markonix @ 1.09.2013, 11:37:08 ) *
Jakie odświeżenie strony? Przecież po odświeżeniu tablica POST będzie pusta.


Sprawdzałeś?
Raczej nie, bo jak byś sprawdził, to byś wiedział że przeglądarka ZAWSZE pyta czy wyzerować tablicę post czy pozostawić.


Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Raczej nie, bo jak byś sprawdził, to byś wiedział że przeglądarka ZAWSZE pyta czy wyzerować tablicę post czy pozostawić.
Cos ci sie pomylilo z z wcisnieciem F5. Bo odswiezanie przez js (co Ty sugerowales) nic juz nie wysyla ponownie
Go to the top of the page
+Quote Post
markonix
post
Post #8





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Cytat(timon27 @ 3.09.2013, 12:37:13 ) *
Sprawdzałeś?
Raczej nie, bo jak byś sprawdził, to byś wiedział że przeglądarka ZAWSZE pyta czy wyzerować tablicę post czy pozostawić.

Nie trzeba sprawdzać oczywistych rzeczy.

Ponad to nie pytałem o rozwiązanie w JS bo takie można faktycznie szybko wyskrobać.
Choćby wyświetlić okno logowania, po zalogowaniu zaktualizować sesje, zamknąć okienko i albo poczekać na reakcje użytkownika albo wymusić submit.
Pytałem jednak o coś typowo server side.

Jak już odgrzebałeś temat to mała poprawka - mój kod działa, ale trzeba uważać w sytuacji gdy ktoś wykona akcje, nie zaloguje się i potem będzie chciał wrócić samodzielnie na stronę wyjściową - wymuszać będzie logowanie (linia 20). Dlatego trzeba jeszcze tam jakiś warunek dodać aby te sprawdzanie zapamiętanych akcji działo się tylko w momencie powrotu z strony autoryzacji (np. parametr GET).
Go to the top of the page
+Quote Post
timon27
post
Post #9





Grupa: Zarejestrowani
Postów: 578
Pomógł: 69
Dołączył: 15.04.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 3.09.2013, 12:48:11 ) *
Bo odswiezanie przez js (co Ty sugerowales) nic juz nie wysyla ponownie

Cytat(markonix @ 3.09.2013, 19:41:34 ) *
Nie trzeba sprawdzać oczywistych rzeczy.

Jak widać trzeba.
Ja sprawdziłem - przy odświerzaniu przez js zapytał mnie.
Go to the top of the page
+Quote Post
markonix
post
Post #10





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Cytat(timon27 @ 3.09.2013, 21:55:39 ) *
js zapytał mnie.

Nie wiedziałem że potrafi mówić.

Pokaż kod.
Go to the top of the page
+Quote Post
timon27
post
Post #11





Grupa: Zarejestrowani
Postów: 578
Pomógł: 69
Dołączył: 15.04.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Cytat(markonix @ 3.09.2013, 22:51:05 ) *
Pokaż kod.


Kod formularza i przycisku refresh?
ok...

Masz, zawartość pliku a.htm:
  1. <span onClick="document.location.reload(true)">refresh</span>
  2. <br>
  3. <form action=a.htm method=post>
  4. <input name=dump>
  5. <input type=submit>


Faktycznie, działa w firefox oraz internet explorer, ale już w chromie nie.
Mój błąd, miałem tylko te dwie przeglądarki.

Cytat(markonix @ 3.09.2013, 22:51:05 ) *
Nie wiedziałem że potrafi mówić.

Czy jeśli o coś zapytasz kolegę na gadu-gadu to go nie zapytałeś, bo nic nie mówiłeś, tylko pisałeś?

Ten post edytował timon27 4.09.2013, 23:36:36
Go to the top of the page
+Quote Post
markonix
post
Post #12





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Nie można opierać ważnej funkcjonalności o coś tak różnie działającego.
Poza tym nadal uważam, że wymuszanie na użytkowniku potwierdzania ponownego wysłania POST z nadzieją, że zorientuje się, że chodziło o poprzednią akcje jest totalnie nie trafione. Algorytm jakby to można zrobić JSem już podałem i często widzę takie rozwiązania na stronie i się sprawdzają.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 23:17