ASP의 임의의 클래스에서 세션 변수에 액세스하는 방법.인터넷?
앱의 App_Code 폴더에 클래스 파일을 만들었습니다.세션 변수가 있습니다.
Session["loginId"]
수업에서 이 세션 변수에 액세스하고 싶지만 다음 행을 쓸 때 오류가 발생합니다.
Session["loginId"]
ASP의 app_code 폴더에 생성된 클래스 내의 세션 변수에 액세스하는 방법을 알려주시겠습니까?NET 2.0 (C#)
(완전성을 위해 갱신)
세션 변수에는 임의의 페이지에서 액세스 할 수 있으며,Session["loginId"]
모든 클래스(예를 들어 클래스 라이브러리 내)에서 사용System.Web.HttpContext.Current.Session["loginId"].
하지만 제 원래 답변은 읽어주세요...
저는 항상 ASP 주변에서 래퍼 클래스를 사용합니다.세션 변수에 대한 액세스를 간소화하는 NET 세션:
public class MySession
{
// private constructor
private MySession()
{
Property1 = "default value";
}
// Gets the current session.
public static MySession Current
{
get
{
MySession session =
(MySession)HttpContext.Current.Session["__MySession__"];
if (session == null)
{
session = new MySession();
HttpContext.Current.Session["__MySession__"] = session;
}
return session;
}
}
// **** add your session properties here, e.g like this:
public string Property1 { get; set; }
public DateTime MyDate { get; set; }
public int LoginId { get; set; }
}
이 클래스는 자신의 인스턴스를 ASP에 저장합니다.NET 세션은 모든 클래스에서 타입 세이프 방식으로 세션속성에 액세스 할 수 있도록 합니다.다음은 예를 제시하겠습니다.
int loginId = MySession.Current.LoginId;
string property1 = MySession.Current.Property1;
MySession.Current.Property1 = newValue;
DateTime myDate = MySession.Current.MyDate;
MySession.Current.MyDate = DateTime.Now;
이 방법에는 다음과 같은 이점이 있습니다.
- 많은 타이프 캐스팅으로부터 당신을 구합니다.
- 응용 프로그램 전체에서 하드 코딩된 세션 키를 사용할 필요가 없습니다(예: Session ["loginId"]).
- MySession 속성에 XML 문서 의견을 추가하여 세션 항목을 문서화할 수 있습니다.
- 세션 변수를 기본값으로 초기화할 수 있습니다(예: null이 아님 확인).
스레드의 HttpContext를 통해 세션에 액세스합니다.-
HttpContext.Current.Session["loginId"]
제안된 솔루션의 문제는 프로세스 외 세션 스토리지를 사용하는 경우 SessionState에 내장된 일부 성능 기능이 중단될 수 있다는 것입니다.('스테이트 서버 모드' 또는 'SQL 서버 모드' 중 하나).oop 모드에서는 세션 데이터를 페이지 요청의 마지막에 시리얼화하고 페이지 요청의 처음에 역직렬화해야 합니다.이 경우 비용이 많이 들 수 있습니다.성능을 향상시키기 위해 SessionState는 첫 번째 접근 시 변수만 역직렬화함으로써 필요한 것만 역직렬화하려고 하며 변경된 변수만 재직렬화 및 치환합니다.세션 변수가 많고 기본적으로 모든 것을 하나의 클래스에 푸시하면 세션 내의 모든 것이 세션을 사용하는 모든 페이지 요청에서 역직렬화되며 클래스가 변경되었기 때문에 속성이 하나만 변경되어도 모든 것이 다시 직렬화되어야 합니다.세션과 op 모드를 많이 사용할 경우 고려해야 할 사항입니다.
앞에 제시된 답변은 문제에 대한 적절한 해결책을 제시하지만, 이 오류가 발생하는 이유를 이해하는 것이 중요하다고 생각합니다.
Session
의 of의 Page
returns 、 「 」타입의 합니다.HttpSessionState
그 특정 요구와 관련된 것입니다. Page.Session
는 실제로 콜링에 합니다.Page.Context.Session
.
MSDN 에서는, 다음의 순서에 대해 설명합니다.
ASP를 사용하다NET 페이지에는 시스템에 대한 기본 참조가 포함되어 있습니다.네임스페이스(「」를 한다)
HttpContext
의 할 수 .HttpContext
aspx에 대한 가 .HttpContext
.
그러나 App_Code의 클래스 내에서 이 속성에 액세스하려고 하면 클래스가 페이지 클래스에서 생성되지 않는 한 속성을 사용할 수 없습니다.
자주 발생하는 이 시나리오에 대한 저의 해결책은 페이지 오브젝트를 클래스에 넘기지 않는 것입니다.세션 페이지에서 필요한 객체를 추출하여 이름-값 컬렉션 / 배열 / 목록 형식으로 클래스로 전달합니다(대소문자에 따라 다릅니다.
asp.net core에서는, 이것은 다른 방법으로 동작합니다.
public class SomeOtherClass
{
private readonly IHttpContextAccessor _httpContextAccessor;
private ISession _session => _httpContextAccessor.HttpContext.Session;
public SomeOtherClass(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public void TestSet()
{
_session.SetString("Test", "Ben Rules!");
}
public void TestGet()
{
var message = _session.GetString("Test");
}
}
출처 : https://benjii.me/2016/07/using-sessions-and-httpcontext-in-aspnetcore-and-mvc-core/
커스텀 세션클래스 내에서 세션 변수를 조작하려고 했기 때문에 같은 에러가 발생했습니다.
나는 현재의 상황(시스템)을 통과해야 했다.web.context.current)를 클래스로 변환하고 모든 것이 정상적으로 종료되었습니다.
엄마.
이는 애플리케이션뿐만 아니라 개발자 모두에게 더 효율적일 것입니다.
다음 클래스를 웹 프로젝트에 추가합니다.
/// <summary>
/// This holds all of the session variables for the site.
/// </summary>
public class SessionCentralized
{
protected internal static void Save<T>(string sessionName, T value)
{
HttpContext.Current.Session[sessionName] = value;
}
protected internal static T Get<T>(string sessionName)
{
return (T)HttpContext.Current.Session[sessionName];
}
public static int? WhatEverSessionVariableYouWantToHold
{
get
{
return Get<int?>(nameof(WhatEverSessionVariableYouWantToHold));
}
set
{
Save(nameof(WhatEverSessionVariableYouWantToHold), value);
}
}
}
실장은 다음과 같습니다.
SessionCentralized.WhatEverSessionVariableYouWantToHold = id;
언급URL : https://stackoverflow.com/questions/621549/how-to-access-session-variables-from-any-class-in-asp-net
'programing' 카테고리의 다른 글
Swift에서 UIView 서브클래스의 커스텀 init을 작성하려면 어떻게 해야 하나요? (0) | 2023.04.21 |
---|---|
수십억 개의 행을 저장할 수 있는 최적의 데이터 저장소 (0) | 2023.04.21 |
Column에 Cell 값이 있는지 확인하고 NEXT Cell 값을 가져옵니다. (0) | 2023.04.21 |
PowerShell의 외부 프로세스에서 출력 데이터를 변수로 캡처하려면 어떻게 해야 합니까? (0) | 2023.04.21 |
디렉토리의 "401 Unauthorized" (0) | 2023.04.21 |