Partajarea cookie-urilor de sesiune ASP.NET cu un applet Java

Am un applet Java ce rulează într-o pagină aspx autentificată de formulare. În versiunea .NET 1.1 a site-ului meu, applet-ul are acces la cookie-ul de sesiune și poate prelua un fișier de la server, dar în versiunea .NET 2.0 nu reușește să se autentifice.

Am vazut cateva posturi de forum in alta parte care afirma ca 2.0 seturi de cookies la HttpOnly in mod implicit, dar solutiile date nu au functionat pentru mine pana acum. De asemenea, am citit undeva că 2.0 poate fi discriminatoriu pe baza unui utilizator-agent.

Are cineva experiență sau înțelegere în acest sens?

3

4 răspunsuri

Această întrebare este veche, dar m-am gândit că este valoroasă să aveți răspunsul corect aici.

Filip este confuz Java pe partea de server cu client-side Java. Este corect că nu puteți partaja sesiuni între două platforme de pe server, cum ar fi Java (J2EE) și ASP.Net, fără a utiliza o abordare personalizată.

Cu toate acestea, applet-urile sunt client-parte și, prin urmare, ar trebui să poată accesa informațiile despre sesiune ale paginii gazdă. Problema este că ASP.Net 2.0 a adăugat pavilionul HttpOnly pe cookie-urile de sesiune. Acest steguleț împiedică JavaScript și applet-urile Java să acceseze aceste cookie-uri.

Soluționarea este de a dezactiva semnalul HttpOnly pe cookie-urile de sesiune. În timp ce ați putea să o faceți în configurație în versiuni mai noi ale ASP.Net, în versiunile anterioare, soluția a fost de a adăuga următorul cod la fișierul Global.asax:

protected void Application_EndRequest(object sender, EventArgs e)
{
    /**
    * @note Remove the HttpOnly attribute from session cookies, otherwise the 
    *      Java applet won't have access to the session. This solution taken
    *      from
    *      http://blogs.msdn.com/jorman/archive/2006/03/05/session-loss-after-migrating-to-asp-net-2-0.aspx
    *
    *      For more information on the HttpOnly attribute see:
    *
    *      http://msdn.microsoft.com/netframework/programming/breakingchanges/runtime/aspnet.aspx
    *      http://msdn2.microsoft.com/en-us/library/system.web.httpcookie.httponly.aspx
    */
    if (Response.Cookies.Count > 0)
    {
        foreach (string lName in Response.Cookies.AllKeys)
        {
            if (lName == FormsAuthentication.FormsCookieName || 
                lName.ToLower() == "asp.net_sessionid")
            {
                Response.Cookies[lName].HttpOnly = false;
            }
        }
    }
}

Rețineți că, chiar și cu această remediere, nu toate combinațiile browser/OS/Java pot accesa cookie-uri. În prezent, investighez o problemă în care cookie-urile de sesiune nu sunt accesibile în Firefox 4.0.1 cu Java 1.6.0_13 pe Windows XP.

Soluția este de a folosi abordarea pe care a sugerat-o Dr. Dad, în care ID-ul sesiunii este trecut la aplet ca parametru și apoi este fie încorporat în adresa URL a solicitării (necesită ca sesiunile URL să fie activate în configurația de pe server), fie trimis ca un modul cookie setat manual.

5
adăugat

Filip este atât corect cât și incorect, cel puțin wrt la Java și ASP.NET. Un applet poate accesa sesiunea ASP.NET prin înșelăciune. În cazul meu, am adăugat id-ul sesiunii ca parametru al applet-ului, pe care apletul îl adaugă ca cookie în cererile sale. Pare să lucreze bine. (Am codificat id-ul de sesiune pentru a împiedica acei oameni hackeri urâți!)

1
adăugat

Sunt conștient că poate fi un răspuns foarte târziu, dar vă pot da o soluție mai simplă: - de obicei, nu întotdeauna, applet-urile folosesc greu html și JavaScript pentru interfețele și interacțiunile lor. - Javascript este rulat în browser. - apelurile Ajax sunt făcute de browser. - Apelurile Ajax sunt asincrone și pot fi integrate cu ușurință într-o logică de aplicații.

Se poate găsi o soluție elegantă care integrează apelurile Ajax la logica unui applet, delegând browserului securitatea.

0
adăugat

Răspunsul lui Filip nu este complet corect. Am rulat un program pentru a mirosi anteturile HTTP de pe stația mea de lucru, iar applet-ul Java prezintă, de fapt, biletul de autentificare ASP.NET în anumite circumstanțe - nu suficient de fiabil pentru nevoile mele.

Eventually I did find a solution to this, but it didn't entirely solve my problem. You can add an entry to the web.config in .NET 2.0: ; but this didn't work for all my users.

Soluția pe termen lung sa dovedit a fi modificarea applet-ului Java, astfel încât nu este nevoie să se recupereze nimic de la serverul web.

0
adăugat
JavaScript, România - Moldova
JavaScript, România - Moldova
254 participanți

Comunitatea Română JavaScript: github.com/js-ro Pentru confort, opriți notificările. Parteneri: @node_ro, @php_ro, @python_ro, @seo_ro, @RomaniaGroup, @ai_ro, @Grupuri_IT Offtop: @holywars_ro Joburi: @js_jobs_ro Sponsored with ❤️ by ciupacabra.com

JavaScript jobs România Moldova
JavaScript jobs România Moldova
109 participanți

Pentru confort opriți notificările. Vorbim despre posturi de muncă și freelance, proiecte proprii.