管理者以外のユーザーでのみ発生する、非常に奇妙な問題が発生しています。
ユーザーがログインして 1 つのページにアクセスすると、システムからログアウトされます。ログインしたかのようにページの読み込みが終了しますが、他の操作 (ブラウザ ページの更新を含む) を試みると、ログインしていないと見なされ、ログイン プロンプトが表示されます。
フィドラーを開くと、サーバーからの応答の 1 つに次のものが含まれていることがわかります。
応答は 71 バイトの Cookie データを送信しました: Set-Cookie: portalaliasid=; expires=Sat, 08-May-1982 17:26:06 GMT; パス=/; HttpOnly
応答は 69 バイトの Cookie データを送信しました: Set-Cookie: portalroles=; expires=Sat, 08-May-1982 17:26:06 GMT; パス=/; HttpOnly
応答は 69 バイトの Cookie データを送信しました: Set-Cookie: .DOTNETNUKE=; expires=Tue, 12-Oct-1999 04:00:00 GMT; パス=/; HttpOnly
応答は 27 バイトの Cookie データを送信しました: Set-Cookie: language=; パス=/; HttpOnly
応答は 33 バイトの Cookie データを送信しました: Set-Cookie: authentication=; パス=/; HttpOnly
これは、カスタム ashx Web 呼び出しにアクセスすると常に発生するようです。この呼び出しを行うコードは、次の 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>');
}
}
}
});
ashxのコードは
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();
}
}
}
関連する Cookie が消去され、管理者以外のユーザーがログアウトされるのはなぜですか?
編集:ミステリーに追加するために、非管理者としてashxにアクセスすると、DNNは302 HTTP応答を返し、同じURLに再度リダイレクトするようです。その 302 応答には、Cookie 消去データが含まれています。2回目にashxにアクセスすると(リダイレクトにより)、正しいデータが返されます。