Я пытаюсь установить переменную сеанса в файле ASHX. Я немного прочитал об этом и получил следующее:Как установить переменную сеанса в файле ASHX
- Я установил переменную в файл ASPX, который вызывает обработчик ASHX.
- Я попытался сбросить переменную в обработчике.
Я получаю сообщение об ошибке «System.Web.HttpContext.Current.Session» имеет значение NULL. Как я уже сказал, я проделал некоторое чтение, и это СМОТРИ, как будто это должно работать, но по какой-то причине я просто не могу заставить его работать на меня.
Я добавил с использованием System.Web.SessionState; в верхней части моего обработчика, но это, казалось, ничего не помогло. Переменная Session (HttpContext.Current.Session ["saml_session_id"]) устанавливается с этим, но, похоже, не сохраняется. Когда я получаю файл aspx и вызываю HttpContext.Current.Session ["saml_session_id"] из моего непосредственного окна, возвращается только NULL.
Я использовал это как руководство (How to access Session in .ashx file?), но, очевидно, что-то не хватает.
Может ли кто-нибудь мне посоветовать? Я продолжу исследования, и если я это разрешу, опубликует решение.
Посмотрите мой код ниже.
В моем файле .aspx - Я объявляю мои переменные сессии:
HttpContext.Current.Session["saml_session_id"] = string.Empty;
Затем в том же файл я публикую в файл ASHx:
var response = Post("http://" + Request.ServerVariables["HTTP_HOST"].ToString() + "/API/Login.ashx", new NameValueCollection() {
{"Username",Username},
{"Password",Password}
});
Тогда в моем файле ASHx я имею (это урезанная версия):
using System.Web.SessionState;
//Some validation happens and a string called session_id gets generated.
context.Session["saml_session_id"] = session_id;
//while I'm in the ashx file, context.Session["saml_session_id"] persists.
Когда запрос в обработчике закончен proc эссинга, следующий код в файле ASPX это:
if (Response.Status.ToString() == "200 OK") {
Context.Response.Redirect("../Play.aspx?SessionId=" + HttpContext.Current.Session["saml_session_id"].ToString());
}
Но HttpContext.Current.Session [ "saml_session_id"] ToString() теперь пусто снова.. В принципе, похоже, что обработчик и веб-форма не сообщаются или сеанс не используется. Я проверил, чтобы пространство имен было одинаковым. Что-нибудь еще я должен проверить?
Почему вы проводки с сервера кода на стороне в том же коде, а не просто призывающую код напрямую? Я предполагаю, что, поскольку сервер отправляет данные, а не пользователь, он рассматривается как новый сеанс. Вы должны либо отправить сообщение клиенту, либо просто вызвать код на стороне сервера из вашего собственного кода в коде. – mason
Спасибо - я пришел к аналогичной реализации о новом сеансе. Это код, который я унаследовал, и я пытаюсь реализовать вызов SAML с использованием той же логики аутентификации. Письмо с исходной формой выполняется через jquery. Вместо этого я реализую вызов SAML - проверка правильности утверждения и последующая публикация в исходном файле ASHX. Я думаю, что я просто поставлю куки-файл и сделаю это. Я отправлю свое решение. – kickinchicken