» »

[C# asp.NET web forma] Kam zgine cookie oz. zkj se izbriše?

[C# asp.NET web forma] Kam zgine cookie oz. zkj se izbriše?

Morenov ::

Torej web forma:

<form id="form1" runat="server">
    <div>
        <asp:TextBox ID="txtBxEmail" runat="server"></asp:TextBox>
        <asp:TextBox ID="txtBxPassword" runat="server"></asp:TextBox>
        <asp:Button ID="btnLogin" runat="server" Text="Login" OnClick="btnLogin_Click" />
        <br /><br />
        <asp:TextBox ID="txtBxLink" runat="server" Text="http://primer.com/elements/13579642/"></asp:TextBox>
        <asp:Button ID="btnDisplay" runat="server" Text="Display" OnClick="btnDisplay_Click" />
        <br /><br />
        <asp:TextBox ID="txtBxSource" runat="server" TextMode="MultiLine" Width="600" Height="600"></asp:TextBox>
    </div>
    </form>


In code behind:

protected void Page_Load(object sender, EventArgs e)
    {

    }

    CookieContainer loginCookie;

    public void btnLogin_Click(object sender, EventArgs e)
    {
        string postData = "type=0&user=" + txtBxEmail.Text + "&password=" + txtBxPassword.Text + "&remember=0";
        CookieContainer tempCookies = new CookieContainer();
        UTF8Encoding encoding = new UTF8Encoding();
        byte[] byteData = encoding.GetBytes(postData);

        HttpWebRequest postReq = (HttpWebRequest)WebRequest.Create("http://primer.com/ajax/login.ajax.php");
        postReq.Method = "POST";
        postReq.KeepAlive = true;
        postReq.CookieContainer = tempCookies;
        postReq.ContentType = "application/x-www-form-urlencoded";
        postReq.Referer = "http://primer.com/ajax/login.ajax.php";
        postReq.UserAgent = "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.10.229 Version/11.61";
        postReq.ContentLength = byteData.Length;

        Stream postreqstream = postReq.GetRequestStream();
        postreqstream.Write(byteData, 0, byteData.Length);
        postreqstream.Close();
        HttpWebResponse postresponse = null;

        postresponse = (HttpWebResponse)postReq.GetResponse();
        tempCookies.Add(postresponse.Cookies);
        loginCookie = tempCookies;
        StreamReader postreqreader = new StreamReader(postresponse.GetResponseStream());
    }

    public void btnDisplay_Click(object sender, EventArgs e)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(txtBxLink.Text);
        request.CookieContainer = loginCookie;
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream());
        string linkSourceCode = reader.ReadToEnd();

        txtBxSource.Text = linkSourceCode;
    }


Za prikaz podstrani http://primer.com/elements/13579642/ je potrebno biti registriran in prijavljen. Ob kliku na gumb Display se v txtBxSource prikaže source code iz home pagea (http://primer.com/home/) namesto iz željene prej omenjene strani. Če dam celotno kodo pod public void btnLogin_Click zadeva deluje, čim je pa del kode pod public void btnDisplay_Click, pa ne.

1. Kako lahko odpravim napako?

2. Morda se bo komu zdelo N00Bovsko vprašanje: Če dam zadevo na spletno stran in se nekdo logira prek te spletne strani in nato klikne na izpis kode, torej uporabi to mini aplikacijo, bo na stran http://primer.com/ poslan njegov domači IP naslov ali IP web hosta na kateri je aplikacija?

Hvala.

Morenov ::

Če bi mi kdo odgovoril na drugo vprašanje bi mu bil zelo hvaležen.

stb ::

1. Odvisno kaj smatraš za napako :P
Cookie-ji se ne ohranijo ker ob vsakem postbacku na novo deklariraš loginCookie. Shrani ga recimo v viewstate in ga ob drugem requestu od tam preberi.
Možno, da že prijava ne uspe - preveri če ti v postreqreader javi da recimo geslo ni pravilno.
Če bi rad namesto html kode v brskalniku prikazal uporabniku berljivo html stan namesto asp:textbox uporabi asp:literal

2. Strežnik primer.com bo vsekakor videl IP serverja na katerem teče ta tvoja aplikacija, ne pa IP računalnika končnega uporabnika. Ker tvoja aplikacija igra vlogo posrednika, lahko nastaviš ustrezen http header X-FORWARDED-FOR, a je odvisno od aplikacije na strežniku primer.com kako, če sploh bo to upoštevala.

Morenov ::

Hvala za odgovor.
1. Prijava uspe, ostalo bom poizkusil ;)
2. To zna pa biti problem. Gre se za online manager pri katerem ima posameznik lahko samo en klub oz. iz enega IPja en klub, če sta 2 iz istega IPja ne smeta trgovat med sabo. Sedaj če se bi več folka prijavljalo prek tega web hosta bi potemtakem imeli isti IP in bi jih lahko banali, če bi med sabo trgovali, kar pa se ne sme zgodit. Praviš da ni nobene zanesljive poti za odpravitev tega problema?
Če uspem nastavit X-Forwarded-For kako lahko z gotovostjo pogledat kateri IP je v igri?

Zgodovina sprememb…

  • spremenil: Morenov ()

stb ::

1. Namesto v viewstate lahko cookie spraviš tudi v uporabnikov session na strežniku. Stvar okusa in potreb.
2. Če storitev omogoča vpogled v IPje zadnje tvoje aktivnosti (kot npr Gmail desno spodaj: Last account activity: 1 hour ago Details) lahko dobiš občutek če si na pravi poti, z gotovostjo pa ne moreš vedeti drugače, kot da preizkusiš (lahko kar v svojem Firefox-u z dodatkom Modify Headers) in s tem tvegaš da te banajo.
Je pa za obhod tovrstne "zaščite" na voljo precej načinov, npr: menjava dinamičnega IPja pri tvojem internetnem ponudniku, anonymoX dodatek za Firefox, prosto dostopna wifi omrežja...

Za kakšno legitimno uporabo pa bi uporabniki sploh uporabljali tvojo storitev in ji zaupali uporabniško ime in geslo?

Mesar ::

če boš v sešn daval ti bojo miši kukije požrle!!
Your turn to burn!

Morenov ::

Imam narejeno aplikacijo, ki izračuna ponderirane skille 'nogometašev' v managerju. Namenjena je ugotovitvi koliko je nogometaš dober v določeni igralni poziciji in primerjavi nogometašev med sabo.
Praviš da je zadeva tvegana, potemtakem raje ne bi reskiral ;(( da me ne bo potem kakšen zanesenjak zaradi tega 'ubil' :O


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

ASP.NET + C# vprašanje

Oddelek: Programiranje
342649 (1663) Morenov
»

Avtomatično prepoznati POST spremenljivke

Oddelek: Programiranje
121463 (1256) AnonimkeOP
»

[C#] Simobilov Glasnik

Oddelek: Programiranje
134176 (1256) Mrch
»

kaj zna c#

Oddelek: Programiranje
151691 (1503) snow
»

Kako z VS.NET priti do izvorne kode neke html strani?

Oddelek: Programiranje
91273 (1068) Microsoft

Več podobnih tem