[C#] HttpRequest - Logowanie bez ciasteczek

Witajcie!

Używając HttoRequest napisałem logowanie do pewnej strony(działa tak jak należy)

Jednak jest jeden problem.

Strona nie używa ciasteczek, ale chyba sesji(jedyne co mi przychodzi do głowy)

Gdyby to były ciasteczka to nie byłoby problemu, ale teraz jeśli zaloguję się na stronę, a potem chcę przejść do strony tylko dla zarejestrowanych wywala mi że jestem nie zalogowany.

Mój kod:

string kod; 

            String postData = string.Format("wyslane=TRUE&login={0}&haslo={1}", textBox1.Text, textBox2.Text);



            UTF8Encoding charset = new UTF8Encoding();

            Byte[] byteData = charset.GetBytes(postData);

            HttpWebRequest postRequest = (HttpWebRequest)WebRequest.Create("http://***.net/logowanie.php"); 

            postRequest.Method = "POST"; 

            postRequest.KeepAlive = true; 

            postRequest.ContentType = "application/x-www-form-urlencoded"; 

            postRequest.Referer = "http://***/logowanie.php";

            postRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/4.0"; 

            postRequest.ContentLength = byteData.Length; 

            Stream postRequestStream = postRequest.GetRequestStream();

            postRequestStream.Write(byteData, 0, byteData.Length);

            postRequestStream.Close(); 

            HttpWebResponse postResponse; 

            postResponse = (HttpWebResponse)postRequest.GetResponse();

            StreamReader postRequestReader = new StreamReader(postResponse.GetResponseStream());

            kod = postRequestReader.ReadToEnd(); 


            /*


             Zalogowanie i przejście pod stronę tylko dla zalogowanych.

             * */


            /*


             Strona uważa nas za niezalogowanych 


             * */

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://***.net/linki.php");

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            StreamReader reader = new StreamReader(response.GetResponseStream());

            string kod2 = reader.ReadToEnd();

            richTextBox1.Text = kod2;

Muszę przekierować do tej strony się sam, ponieważ po zalogowaniu strona przekierowuje w JS(czego HttpRequest chyba nie obsługuje)

Jakieś pomysły?

Z góry dziękuję za pomoc :smiley:

Zapewne serwer korzysta z mechanizmu sesji, ale: nie ma, że nie używa ciasteczek. Informacja o nr sesji musi być gdzieś przechowywana, żeby przeglądarka mogła o niej poinformować serwer, i są to cookies. Czyli tam coś, prawie na pewno, jest, co trzeba dalej przekazywać.

Nie znam nic tego języka, lecz z tego co widzę na msdn, HttpWebRequest Class zawiera jakąś właściwość CookieContainer, lecz nie jest ona domyślnie używana.

Trzeba z tego skorzystać - podejrzewam, że po ‘odblokowaniu’, jeżeli obiekt CookieContainer będzie przekazywany (wspólna instancja zdefiniowana wcześniej) to zadziała - rozpozna sesję serwer, bo dostanie ciastko.

Wcześniej przy logowaniu użyłem cookie containera i przy wczytaniu go dorzucalem ale nie akceptowało.

Cookie editorem jest ciasteczko phpsesid ale po zmianie go nic się nie dzieje.

Muszą być jakieś ciastka. Nigdzie indziej nie da się zapisać informacji. Chyba że jakimś cudem strona zapisuje dane w cache flasha co mi się raz zdarzyło. Nie mam przy sobie żadnego przykładowego kodu ale może po prostu źle wysyłasz posta. Albo ciasteczka zapisywane są dla podstrony - też miałem przypadek (nie wiem jak dokładnie wyjaśnić co mam na myśli). Z moimi przeprawami z logowaniem właśnie największym problemem był poprawny POST + brak ciasteczek bo ciasteczka były tak jakby w podstronie - dawno pisałem i nie pamiętam na czym dokładnie problem polegał.

Edit:

Już pamiętam. U mnie był taki problem że ładował się niby obrazek który tak naprawdę był stroną w PHP, zapisywał ciastka i przekierowywał do obrazka tak więc od strony użytkownika nie było widać że to nie jest obrazek i nie mogłem zlokalizować skąd się te ciastka biorą. W operze było widać, w CookieContainter pusto gdyż request nie renderuje przecież stron tylko pobiera tekst.

Wielkie dzięki.

Napisałem kod na nowo i wszystko działa.

Dzięki chłopaki :slight_smile: