Идентификатор сеанса пользователя в качестве параметра в вызове Ajax

Я создал HttpHandler , который я буду использовать с вызовом jquery-Ajax .

Этот HttpHandler будет обращаться к базе данных и проверять что-то, связанное с , которое в настоящее время было написано пользователем .

Пользователь считается подписанным с помощью сеанса с атрибутом user_id .

Session["user_id"] = userId;

Я попытался извлечь этот сеанс в HttpHandler , но это не работает.

Поэтому я решил отправить user_id как параметр .

    var user_id = //Retrieved in some way...
    $.ajax({
        url: 'QuestionRate.ashx?id=user_id',
        success: function (msg, status, xhr) {
            alert(msg);
        },
        error: function() {
            alert(msg);
        }
    });

Но это действительно похоже на плохую идею, любой, кто прочитает коды, может просто получить доступ к Handler с идентификатором, который он хочет.

Так что я могу сделать в этой ситуации? Я хочу, чтобы обработчик получал user_id для доступа к базе данных, но я хочу убедиться, что этот user_id является фактическим идентификатором подписанного пользователя. Нет способа получить доступ к сеансу в обработчике?

4
nl ja de

3 ответы

Передача идентификатора сеанса с помощью ajax-звонка не звучит хорошо.

Вы должны пометить обработчик маркером IReadOnlySessionState интерфейс и доступ к сеансу только для чтения через экземпляр HttpContext.Current.Session .


Пример кода:

public class FooHandler : IHttpHandler, IReadOnlySessionState 
{
    public bool IsReusable
    {
        get { return false; }
    }

    public void ProcessRequest(HttpContext context)
    {
        string user_id = context.Session["user_id"].ToString();
    }
}
6
добавлено
Не могли бы вы обновить свой ответ небольшим примером того, как будет выглядеть этот обработчик? Я действительно не так хорош в C #.
добавлено автор user1665700, источник
BRILLIANT, это сработало, я пытался использовать context.Session ["user_id"], но это не сработало, мне нужно было реализовать этот интерфейс, но я не знал, как реализовать интерфейсы: DI много работал на Java, Я ненавижу, когда мне нужно переехать на другой язык, который очень похож, все чувствует себя ... странно ..
добавлено автор user1665700, источник

Сделайте свой обработчик IRequiresSessionState , который уведомит ASP.NET о том, что ваш обработчик использует состояние сеанса. Тогда cookie сеанса, отправленный клиентом, будет распознан обработчиком, и вы можете получить к нему доступ на сервере, например, на любой другой странице aspx.

Также вы можете использовать IReadOnlySessionState для доступа к сеансу только для чтения.

2
добавлено
Похоже, ваш ответ тоже в конце концов, спасибо!
добавлено автор user1665700, источник

То, что вы собираетесь сделать, это превратить его в POST и добавить его в данные POST . Затем в сочетании с ключом SSL данные POST будут автоматически зашифрованы. Итак, что вы можете попробовать:

var user_id = //Retrieved in some way...
$.ajax({
    type: "POST"
    url: 'QuestionRate.ashx',
    data: { userid: user_id }
    success: function (msg, status, xhr) {
        alert(msg);
    },
    error: function() {
        alert(msg);
    }
});

то в вашем HTTP-обработчике вы можете просто отключить это, используя объект Request .

jQuery AJAX API

1
добавлено
Хорошая идея, реализация SSL может быть проблемой, хотя если у вас нет сертификата.
добавлено автор Liam, источник
V true, SSL является единственным способом true для обеспечения соединения.
добавлено автор Liam, источник
@Liam, да, это правда, но в наши дни это довольно легко, когда Windows Server 2008 является собственным сервером сертификатов. И далее, если ОП обеспокоен безопасностью (т.е. ключ сеанса компрометации) работает веб-сайт без SSL делает Security спорный и, таким образом, если вы не используете SSL просто передать его в строке запроса.
добавлено автор Mike Perrenoud, источник
Использование POST означает, что вы отправляете данные, а не получаете данные, например, сообщение form . Чтобы использовать SSL, вам просто нужно применить сертификат к вашему веб-серверу после или купить один или , создавая свой собственный через Windows Server 2008. Как именно вам нужно получить сертификат, Я не могу ответить, вам нужно понять, что один из вас зависит от ваших потребностей.
добавлено автор Mike Perrenoud, источник
Используя POST, это автоматически означает, что он будет использовать SSL? или что? должен ли я сделать что-то еще?
добавлено автор user1665700, источник
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

Верстка сайтов HTML/CSS/JS/PHP
Верстка сайтов HTML/CSS/JS/PHP
3 439 участник(ов)

Правила группы: напишите !rules в чате. Группа Вк: vk.com/web_structure Freelancer: @web_fl Веб Дизайн: @dev_design Маркетолог: @topmarkening Автор: @M_Boroda

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

DotNetRuChat
DotNetRuChat
2 992 участник(ов)

Чат русскоязычного .NET сообщества http://dotnet.ru/ Вам могут быть интересны: @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @xamarin_russia, @microsoftstackjobs, @uwp_ru Флуд в @dotnettalks

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

pro.net
pro.net
710 участник(ов)

Обсуждение .NET Framework и всего, что с ним связано. Правила: не флудить не по теме, уважать ваших коллег и никакой рекламы (объявления о вакансиях можно согласовать с @AlexFails). Флудилка: @dotnettalks Участник @proDOT

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

.NET Talks: Force Push Masters
.NET Talks: Force Push Masters
490 участник(ов)

Свободный чат .NET разработчиков. Правила: t.me/dotnettalks/56823 Вам могут быть интересны: @dotnetruchat, @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @dotnetgroup, @xamarin_russia, @microsoftstackjobs, @uwp_ru http://combot.org/chat/-1001128250813

All That JS
All That JS
417 участник(ов)

JS на русском

.NET Chat Убежище
.NET Chat Убежище
246 участник(ов)

Чат .NET разработчиков под эгидой MSK/SPB .NET Community Group Вам могут быть интересны: @fsharp_chat, @dotnetruchat, @cilchat, @xamarin_russia, @microsoftstackjobs, @dotnetgroup Флуд в @dotnettalks

.NET CIL Chat
.NET CIL Chat
54 участник(ов)

.NET CIL (aka IL aka MSIL)