내 응용 프로그램에서 내가 저장 한 세션 변수를 가져 와서 존재하는 사용자가 있는지 확인하고 싶습니다. 내가 세션 변수를 얻기 위해 사용하는 코드는 다음과 같습니다 :Startup.cs에서 세션 값에 액세스 할 수 없음
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// Some other default code.
app.UseSession();
app.Use((context, next) =>
{
int? userId = context.Session.GetInt32("User");
// Use the variable.
return next();
});
}
나는 그것이 비어 있고 맥락에서 값이없는 디버거 변수를 확인합니다.
나는 세션 작동하도록() 메소드 ConfigureServices에 Startup.cs에 다음 코드를 추가 :services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(20);
options.Cookie.HttpOnly = true;
});
내 컨트롤러에이 방법으로 세션을 설정 한 경우 :
HttpContext.Session.SetInt32("User", user.Id);
을
그리고 내 컨트롤러에서 세션 변수를 아래와 같이 얻으십시오.
HttpContext.Session.GetInt32("User");
예상대로 작동하며 나의 가치를 되 찾을 수 있습니다.
Startup.cs에서이 기능이 작동하지 않는 이유는 무엇입니까?
'Configure'는 요청 당 * app start *에서 실행된다는 것을 알아야합니다. 결과적으로이 작업을 수행하더라도 사용자가 작성하지 않은 요청을 포함하여 요청간에 사용자 ID를 유출하게됩니다. 본질적으로, 앱 시작 후 첫 번째 사용자 일 뿐이고 다른 모든 요청은 거의 확실하게 * 사용자가 원하는 * 동일한 * 사용자 ID를 사용합니다. –
@ChrisPratt 감사합니다. 디버깅 중에이 사실을 알았습니다. 모든 요청에 대해 생각했습니다. 요청 당 세션 값을 확인하는 올바른 방법이 있습니까? – Arendax
액션/필터/내부. - 요청 당 실제로 호출되는 것. 'Startup'에서 이와 같은 일을 할 수 없습니다. 왜냐하면 그 모든 일은 오직 한 번만 실행되기 때문입니다. –