Cytat
.Myślałem ,że jak szerzej przedstawię swój problem,to jakaś życzliwa osoba wytłumaczy ,albo naprowadzi na właściwy tok rozumowania, abym mógł sobie sam poradzić z problemem, a tu tylko:
Cytat
Chłopie, jesteś naćpany czy co... Naprawdę próbowałem zrozumieć to co napisałeś, ale to jakiś bełkot.
Nie wiem czy zauważyłeś, ale kilka osób już się w tym wątku wypowiedziało, więc ktoś jednak jest życzliwy i chce Ci pomóc. Ale wybacz, czytając
[...] zostaje przekierowany na moją stronę, w procesach serwerowych ta czynność widnieje jako GET czy
czy każdorazowe wykonanie żądania HTTP POST powoduje parsowanie całego dokumentu w języku PHP? nie da się tego potraktować inaczej niż bełkot.
Najpierw odpowiedz czy poniższy opis przedstawia Twoją sytuację. Nie ma sensu dyskutować gdy nie jesteśmy pewni czy Cię w ogóle dobrze zrozumieliśmy.
1. Istnieją dwie strony internetowe na kompletnie oddzielnych serwerach, powiedzmy strona A i B.
2. Użytkownik znajduje się na stronie A.
3. Wypełnia formularz i go wysyła (czy też klika w jakiś link) w obrębie strony A.
4. Strona A przetwarza jego żądanie po czym zwraca nagłówek Location przekierowujący na stronę B.
5. Przeglądarka reaguje na nagłówek - użytkownik zostaje przekierowany na stronę B.
Następnie upływa kilka sekund i...
6. Strona A samoczynnie (bez żadnej reakcji ze strony użytkownika) wysyła żądanie HTTP z jakimiś tam danymi do strony B.
7. Strona B odbiera to żądanie po czym w jakiś sposób odebrane dane powinny zostać przedstawione użytkownikowi na stronie z punktu #5. Innymi słowy w jakiś sposób na stronie B powinny nagle pojawić się użytkownikowi nowe dane.
Czy ten opis jest poprawny? Jak nie to doprecyzuj.
Po pierwsze to cały problem jest kompletnie niezależny od języka. Czy to PHP, Java, C# czy Python nie ma znaczenia bo problem jest na poziomie protokołu HTTP, a nie oprogramowania po stronie serwera.
Po drugie podstawowa cecha protokołu HTTP - "brak stanu/bezstanowość" (ang. stateless - nie da się tego chyba sensownie przetłumaczyć). Oznacza to, że wszystkie żądania (punkt #3, #5 oraz #6) są kompletnie niezależne od siebie i nie mają żadnego powiązania pomiędzy sobą. Dlatego też wypadałoby wprowadzić jakiś identyfikator, który byłby współdzielony przez te wszystkie żądania (dokładnie w ten sam sposób co identyfikator w mechanizmach sesji), aby powiązać je wszystkie ze sobą. Nie chciałbyś w końcu odczytać danych innego użytkownika.
Cała procedura mogłaby wyglądać następująco:
A. W punkcie #5 generujesz jakiś w miarę unikalny identyfikator, który zostaje zapamiętany na stronie A oraz dołączony jako fragment URL-a strony B, do której użytkownik zostaje przekierowany:
// Strona A
$uid = /* wygenerowanie losowego ciągu */;
$redirectURL = 'http://strona.b/?uid=' . $uid;
$db->save('do_wykonania_za_10_sek', array('uid' => $uid, 'param1' => 'wartość1', ...)); // dane dla skryptu, który wykona się za 10 sek. header('Location: ' . $redirectURL);
B. Strona B jest już wygenerowana, więc za 10 sek. nie będziesz wstanie wpłynąć już w żaden sposób na jej treść, dlatego też będziesz musiał skorzystać z AJAX-a* by co kilka sekund odpytywać serwer "czy pojawiły się już jakieś dane dla mojego identyfikatora?". Coś w stylu:
// strona B
window.setInterval(function() {
sendXHR('http://strona.b/czy-sa-jakies-dane-dla-mojego-identyfikatora?uid={WARTOŚĆ UID Z URL-A}', function(data) {
console.log("Pojawiły się następujące dane: " + data);
});
}, 5000);
C. Mija kilka sekund, serwera A wysyła żądanie do serwera B. W żądaniu tym poza jakimiś tam danymi znajduje się jeszcze wcześniej wygenerowany identyfikator.
D. Strona B zapisuje odebrane i przetworzone dane w bazie danych.
E. Skrypt
czy-sa-jakies-dane-dla-mojego-identyfikatora sprawdza czy dla podanego identyfikatora są zapisane w bazie jakieś dane, jeśli tak zwraca je.
* AJAX nie jest tutaj najlepszym rozwiązaniem, ale jest najprostszym w implementacji. Jeżeli chciałbyś by na stronie B nie było bezsensownych, cyklicznych żądań do
czy-sa-jakies-dane-dla-mojego-identyfikatora, ani zbędnych opóźnień (patrz: setInterval) powinieneś skorzystać z dwukierunkowej komunikacji serwerB-klientNaStroneB - Google: JavaScript WebSockets, Comet Server, Bidirectional AJAX etc.