Как создать и получить доступ к сеансу .net core api?

== выполняет контрольную проверку равенства, ссылаясь на то, что 2 объекта (строки в этом случае) относятся к одному и тому же объекту в памяти.

Метод equals() будет проверять, будет ли содержимое или состояния двух объектов одинаковы.

Очевидно, что == работает быстрее, но во многих случаях может (может) давать ложные результаты, если вы просто хотите сказать, имеет ли 2 String s тот же текст.

Определенно рекомендуется использовать метод equals().

Не беспокойтесь о производительности. Некоторые способы поощрения использования String.equals():

  1. Реализация String.equals() сначала проверяет ссылочное равенство (используя ==), и если две строки одинаковы по ссылке, дальнейший расчет Выполняется!
  2. Если 2 ссылки на строки не совпадают, String.equals() будет проверять длину строк. Это также является быстрой операцией, поскольку класс String хранит длину строки, не нужно считать символы или кодовые точки. Если длины отличаются, дальнейшая проверка не выполняется, мы знаем, что они не могут быть равными.
  3. Только если мы доберемся до этого, будет фактически сопоставлено содержимое двух строк, и это будет короткий сравнение: не все символы будут сравниваться, если мы найдем несоответствующий символ (в том же положении в 2 строках), никакие другие символы не будут проверены.

Когда все сказано и даже если у нас есть гарантия, что строки являются стажерами, использование метода equals() все еще не является издержками, которые можно было бы подумать, определенно рекомендуемым способом. Если вам нужна эффективная проверка ссылок, используйте перечисления, где гарантируется спецификацией и реализацией языка, что одно и то же значение перечисления будет одним и тем же объектом (по ссылке).

1
задан SATHEESH P 25 February 2019 в 14:18
поделиться

3 ответа

В Startup.cs вы можете добавить аутентификацию куки, добавив эту строку (вы также можете указать параметры для продолжительности сеанса и т. Д.).

services.AddAuthentication().AddCookie();

Чтобы создать сеанс при входе с контроллера, вы можете вызвать его, чтобы войти как пользователь с набором утверждений (в основном пары ключ / значение, описывающие то, что вам нужно знать о пользователе). ):

await HttpContext.SignInAsync(userId, claims);

Это создает ClaimsPrincipal, к которому можно получить доступ через свойство User на Controller:

User.HasClaim("someclaim", "somevalue")

В конечном итоге промежуточное программное обеспечение шифрует заявки и сохраняет их в cookie, поэтому проверка подлинности все еще без сохранения состояния с точки зрения сервера. Однако имейте в виду, что используемый по умолчанию ключ шифрования привязан к машине, поэтому вам придется использовать что-то вроде azure или redis , если вы планируете масштабировать до нескольких экземпляров сервера.

Если вы хотите иметь полный логин & amp; Система управления пользователями, самый простой способ - это, вероятно, идентификация ASP.net, которая предоставляет API-интерфейсы для обработки пользователей, политик, групп доступа и некоторых хитрых вещей, таких как хранение паролей с использованием Entity Framework. Для получения дополнительной информации, проверьте это: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity?view=aspnetcore-2.2&tabs=visual-studio [ 114]


В качестве дополнительного примечания, для более общего состояния сеанса, этот документ содержит данные о других параметрах состояния сеанса, но, поскольку вы спрашивали о входах в систему, лучшим вариантом является возможно использовать API аутентификации.

0
ответ дан Eric Damtoft 25 February 2019 в 14:18
поделиться

Сначала установите пакет nuget - Microsoft.AspNetCore.Session

В файле Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    .....
    services.AddSession(options => {
        options.IdleTimeout = TimeSpan.FromMinutes(20);//You can set Time  
        options.Cookie.HttpOnly = true;
        options.Cookie.IsEssential = true;
        });
    .....
}

public void Configure(IApplicationBuilder app)
{
    ....
    app.UseSession();
    ....
}

В файле HomeController

using Microsoft.AspNetCore.Http;

public class HomeController : Controller
{    
    public ActionResult Index()
    {   
      HttpContext.Session.SetString("key", "value"); // Set Session  
      var x = HttpContext.Session.GetString("key"); // Get Value of Session
    }    
}

Вы также можете установить целое число значение в сеансе, используйте метод SetInt32 и получите из метода GetInt32. Надеюсь, это поможет вам.

0
ответ дан Nitika Chopra 25 February 2019 в 14:18
поделиться

На самом деле .net core может легко получить доступ к сеансу. Механизм сеансов является основной функцией в aspnet (также .netcore) https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-2.2 [ 117]

Я думаю, вам просто нужно добавить

    services.AddDistributedMemoryCache();

    services.AddSession(options =>
    {
        // Set a short timeout for easy testing.
        options.IdleTimeout = TimeSpan.FromSeconds(10);
        options.Cookie.HttpOnly = true;
    });

в ConfigureServices и:

app.UseSession();

в Configure

Тогда вы можете использовать это где угодно, вводя ISession, где вам нужно. Поскольку это распространяется по проекту, вы должны сериализовать ваши данные, используя что-то вроде JsonConvert.SerializeObject, и десериализовать их обратно.

Эта функция, описанная здесь, не имеет ничего общего с концепциями безопасности.

0
ответ дан Alex Lyalka 25 February 2019 в 14:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: