Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][cUrl] Gubi sesje po przekierowaniu, Jak przekazać sesje?
Mejdej
post 15.01.2010, 16:25:39
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 15.01.2010

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


Cześć,

dopiero raczkuje w cURL, wiec pewnie moje pytanie jest lamerskie, ale co tam:)
Probuje wlogowac sie na strone i zczytac z niej dane. Samo logowanie przebiega (chyba) pomyslnie, bo zes trony ../login.php przekierowuje mnie do ../index.php. Jak wpisze specjalnie zle haslo to przekierowuje mnie do ../login.php?error=1 stad wnioskuje, ze jezeli trafiam do index.php to zalogowalem sie jak nalezy. Problem jest w tym, ze strony index.php mi nie wczytuje tylko robi kolejne przekierowanie ponownie do ../login.php. W naglowkach widze, ze wszedzie sa inne sesje. Tzn po zalogowaniu mam jakas sesje, ale juz w naglowkach na stronie index.php jest inna. Mysle ze to w tym jest problem. Probowalem i z followlocation i bez. Jak jzu mowilem jestem zielony w sprawie cUrla, wiec nie wiem w jai sposob podac dalaej odczytana sesje z pierwszego headera.

Pomoze ktos?

z gory dzieki.


--------------------
porównanie lokat
Go to the top of the page
+Quote Post
pyro
post 15.01.2010, 16:29:47
Post #2





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Daj zajrzeć w kod smile.gif


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
Mejdej
post 15.01.2010, 16:46:44
Post #3





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 15.01.2010

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


Tego sie obawialem:)

Oto kod. Pewnie sa w nim glupoty, ale w koncu dopiero sie ucze:) Oczywiscie te wszystkie "echo" itp to tylko moje raportowanie cobym wiedzial co sie dzieje:0

  1. <?php
  2. $cookie_file = 'cookie'.substr(md5(microtime()), 4, 10).'.txt';
  3. $c = curl_init();
  4. curl_setopt($c, CURLOPT_URL, 'http://www.xxxx.cos/login.php?action=dologin');
  5. curl_setopt($c, CURLOPT_POST, 1);
  6. curl_setopt($c, CURLOPT_POSTFIELDS, 'pass=haselko&user=uzytkownik&login_pass=0&remember=0');
  7. curl_setopt($c, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
  8. curl_setopt($c, CURLOPT_REFERER, 'http://www.xxxx.cos/login.php');
  9. curl_setopt($c, CURLOPT_HEADER, 1);
  10. curl_setopt($c, CURLOPT_FOLLOWLOCATION, 0);
  11. curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
  12. curl_setopt($c, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/'.$cookie_file);
  13. curl_setopt($c, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/'.$cookie_file);
  14.  
  15.  
  16. $page = curl_exec($c);
  17. curl_close($c);
  18. $headers = explode("\r\n", $page);
  19. foreach ($headers as $a) {
  20. if (strpos($a, 'PHPSESSID') > 1) {
  21. $poz = strpos($a, 'PHPSESSID');
  22. $sid = substr($a, $poz + 10, 32);
  23. }
  24. }
  25.  
  26.  
  27. echo('SESJA : '.$sesid.' / '.$sid.'<br><br>');
  28. echo $page;
  29. echo('<br><br>');
  30. print_r($headers);
  31. echo('<br><br>');
  32. print_r($_COOKIE);
  33. $h[0] = str_replace('Set-Cookie: ', '', $headers[7]);
  34. $h[1] = str_replace('Set-Cookie: ', '', $headers[8]);
  35. $h[2] = str_replace('Set-Cookie: ', '', $headers[9]);
  36.  
  37. $c = curl_init();
  38. curl_setopt($c, CURLOPT_URL, 'http://www.xxxx.cos/index.php?sid='.$sid);
  39. curl_setopt($c, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
  40. curl_setopt($c, CURLOPT_REFERER, 'http://www.xxxx.cos/login.php');
  41. curl_setopt($c, CURLOPT_HEADER, 1);
  42. curl_setopt($c, CURLOPT_FOLLOWLOCATION, 0);
  43. curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
  44. curl_setopt($c, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/'.$cookie_file);
  45. $page = curl_exec($c);
  46. curl_close($c);
  47. $headers = explode("\r\n", $page);
  48.  
  49. echo $page;
  50. echo('<br><br>');
  51. print_r($headers);
  52. echo('<br><br>');
  53. print_r($_COOKIE);
  54.  
  55.  
  56.  
  57.  
  58.  
  59. echo 'Wynik: <br>'.$page;
  60. ?>



Dodam jeszcze naglowki jakie zwraca pierwsze wywolanie cUrla:

HTTP/1.1 302 Found
Date: Fri, 15 Jan 2010 15:08:28 GMT
Server: Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.5 with Suhosin-Patch
X-Powered-By: PHP/5.2.6-3ubuntu4.5
Set-Cookie: PHPSESSID=99c70f0da9f1f4989f1364535c2e36ee; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: uname=uzytkownik; expires=Fri, 22-Jan-2010 15:08:28 GMT
Set-Cookie: realm_id=deleted; expires=Thu, 15-Jan-2009 15:08:27 GMT
Set-Cookie: p_hash=haselko; expires=Fri, 22-Jan-2010 15:08:28 GMT
Location: index.php
Vary: Accept-Encoding
Content-Length: 0
Content-Type: text/html


a to zwraca drugie wywolanie cUrla:

HTTP/1.1 302 Found
Date: Fri, 15 Jan 2010 15:08:28 GMT
Server: Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.5 with Suhosin-Patch
X-Powered-By: PHP/5.2.6-3ubuntu4.5
Set-Cookie: PHPSESSID=2dc35bf63d58ad0a8dce799f84a5a128; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Location: login.php
Vary: Accept-Encoding
Content-Length: 0
Content-Type: text/html

Ten post edytował Mejdej 15.01.2010, 19:40:05


--------------------
porównanie lokat
Go to the top of the page
+Quote Post
erix
post 15.01.2010, 17:06:29
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. $cookie_file = 'cookie'.substr(md5(microtime()), 4, 10).'.txt';

Za każdym wywołaniem skryptu plik na ciastka jest inny, dlatego nie chce logować.

W trakcie całej sesji musisz korzystać z tego samego pliku przechowującego ciasteczka.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Mejdej
post 15.01.2010, 17:14:58
Post #5





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 15.01.2010

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


Obawaim sie ze nie o to chodzi. Przeciez skrypt wywoluje tylko raz. Na poczatku ustala sie losowo zmienna $cookie_file.

W trakcie jednego wykonania skryptu jest laczenie i w tym samym wykonaniu skryptu jest drugi cUrl, ktory powinien odczytac dane. Miedzy logowaniem a odczytaniem ta zmienna sie nie zmienia, wiec w ciagu jednego wykonania jest ta sama nazwa pliku z ciastakami.

Dla pewnosci wywalilem losowosc, ale to i tak nic nie dalo.


--------------------
porównanie lokat
Go to the top of the page
+Quote Post
erix
post 15.01.2010, 17:54:13
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Fakt, moje przeoczenie.

Sprawdź, czy stała sesyjna jest prawidłowo ustalona. Poza tym, spróbuj bez tego parametru w URL.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Mejdej
post 17.01.2010, 01:36:01
Post #7





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 15.01.2010

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


Bez tego parametru w url bylo na poczatku. Dostawilem go w akcie desperacji:)

Nie rozumiem niestety pytania "czy stała sesyjna jest prawidłowo ustalona?". O jaka stala chodzi? Prosze o wyrozumialosc dla laika:)

Co ja zle robie z ciasteczkami, ze ich nie chce mi odczytac?

Zapisuja sie do pliku dobrze, bo widze je w pliku, ale za drugim razem sie nie odczytuja.

Zapis:

  1. curl_setopt($c, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/'.$cookie_file);
  2. curl_setopt($c, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/'.$cookie_file);


Odczyt:

  1. curl_setopt($c, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/'.$cookie_file);


Tak powinno byc? Czy cos pokrecilem?

Juz wszystko sie wyjasnilo. Problem byl zupelnie w czym innym. Po prostu w ciagu przesylanym POSTem jedna zmienna miala inna nazwe. Przeoczylem, ze po drodze jej nazwa sie zmieniala i wysylana byla inna niz nazwa pola formularza.

Dziekuje wszystkim za probe pomocy.


--------------------
porównanie lokat
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 16:53