4 Stimmen

Warum löscht DNN meine Authentifizierungs-Cookies, wenn ich von einem Child-Portal auf ein Ashx zugreife?

Ich habe ein wirklich merkwürdiges Problem, das nur bei Benutzern auftritt, die keine Administratoren sind.

Wenn der Benutzer sich anmeldet und eine Seite aufruft, wird er vom System abgemeldet. Die Seite wird zu Ende geladen, als ob der Benutzer angemeldet wäre, aber sobald er andere Aktionen versucht (einschließlich des Aktualisierens der Browserseite), wird er als nicht angemeldet betrachtet und erhält eine Anmeldeaufforderung.

Wenn ich Fiddler öffne, sehe ich, dass eine der Antworten des Servers Folgendes enthält:

Als Antwort wurden 71 Byte Cookie-Daten gesendet: Set-Cookie: portalaliasid=; expires=Sat, 08-May-1982 17:26:06 GMT; path=/; HttpOnly

Antwort gesendet 69 Bytes Set-Cookie: portalroles=; expires=Sat, 08-May-1982 17:26:06 GMT; path=/; HttpOnly

Antwort gesendet 69 Bytes Cookie da Set-Cookie: .DOTNETNUKE=; expires=Tue, 12-Oct-1999 04:00:00 GMT; path=/; HttpOnly

Antwort sendet 27 Bytes von Cookie Set-Cookie: language=; path=/; HttpOnly

Antwort sendet 33 Bytes Cooki Set-Cookie: authentication=; path=/; HttpOnly

Dies scheint immer zu passieren, wenn ich auf meinen benutzerdefinierten ashx-Webaufruf zugreife. Der Code, der diesen Aufruf macht, ist das folgende Javascript:

$('#lstStates').empty();
var selectedRegions = $('select[id*=lbxRegions]').val();

// Get the list of states for the selected regions
$.ajax({
    url: '/DesktopModules/MyModule/ashx/GetStatesForRegions.ashx',
    data: { regions: selectedRegions },
    dataType: 'json',
    success: function (data) {
        if (IsArray(data)) {
            for (var state in data) {
                $('#lstStates').append('<option>' + data[state] + '</option>');
            }
        }
    }
});

Der Code in der ashx lautet

public class GetStatesForRegions : IHttpHandler
{
    public bool IsReusable { get { return false; } }

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";

        // Get the list of region ids from the GET request
        string[] ids;
        string regionsArray = context.Request["regions[]"] ?? string.Empty;
        ids = regionsArray.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

        using (var dbContext = new MyDataContext())
        {
            string[] states;

            var query = dbContext.Schools.Where(x => x.PodRegionId != null);

            if (ids != null && ids.Length > 0)
                query = query.Where(x => ids.Contains(x.PodRegionId.ToString()));

            states = query.Select(x => x.xosAddress.State)
                          .Distinct()
                          .OrderBy(x => x)
                          .ToArray();

            context.Response.Write(JsonConvert.SerializeObject(states));
            context.Response.End();
        }
    }
}

Warum werden meine relevanten Cookies gelöscht und Nicht-Administrator-Benutzer ausgeloggt?


bearbeiten : Um das Rätsel noch zu vervollständigen, scheint DNN beim Zugriff auf die ashx als Nicht-Administrator eine 302 HTTP-Antwort zurückzugeben, die Sie wieder auf dieselbe URL umleitet. Diese 302-Antwort enthält die Daten zum Löschen der Cookies. Beim zweiten Zugriff auf die ashx (aufgrund der Umleitung) werden die korrekten Daten zurückgegeben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X