문제

쿠키에 전체 세션을 저장하는 것은 지난 몇 년 동안 철도에서 표준이었습니다. ASP MVC와 비슷한 것을 달성 할 수있는 쉬운 방법이 있습니까?

기본적으로 세션 / tempdata의 모든 것이 서버의 메모리에 저장됩니다. web.config에서 이것은 SQL 스토어 / 서버 측 캐시로 변경할 수 있습니다. 쿠키에 이러한 물체를 지속시킬 수 있기를 원합니다.

사용자 정의 세션-상태 상점 제공 업체를 구현할 수있는 것 같습니다. 더 간단한 접근법이 있습니까?

도움이 되었습니까?

해결책

예, 구현 a 맞춤 상태 세션 제공자. 그리고 아뇨, Afaik 더 간단한 접근 방식이 없습니다.

추신. 그것은 보이는 것만 큼 나쁘지 않습니다. 즉, 절반의 절반 ODBC 샘플 DB에 글을 쓰고 있습니다.

다른 팁

쿠키에 세션 ID (해시 또는 무엇이든)를 저장 한 다음 해당 ID를 사용하여 메모리 / 데이터베이스 / 원하는 스토리지에서 세션 데이터를 얻는 것이 훨씬 더 효율적이라고 생각합니다. 전체 세션 상태를 쿠키로 유지하면 대역폭이 순진하게 증가합니다.

또한 보안을 명심하십시오 : 쿠키에 인증 정보 또는 기타 민감한 데이터가 포함되어 있고주의를 기울이지 않으면 사용자가 쉽게 해킹하여 권한을 얻거나 응용 프로그램을 엉망으로 만들 수 있습니다 (데이터 암호화도 짜증나게합니다. 베이스 64는 암호화 된 데이터를 인코딩해야하며,이 데이터는 대역폭과 처리 시간을 추가로 낭비합니다). 당신은해야합니다 절대 사용자의 신뢰 입력.

나는 전체 세션을 쿠키에 저장하는 것을 강력하게 낙담시킬 것입니다. 성능이 좋지 않습니다. 이것을 고려하십시오. 결국이 오버 헤드는 사용자, 대역폭 및 사이트 성능에 도달합니다.

예는 다음과 같습니다.

GET / HTTP/1.1
Host: localhost
OtherUsefulHeaders: foo
Cookie: YourSessionState=...

초기 요청 크기는 약 200 바이트입니다. 세션에 약 100 바이트를 추가합니다. 이제 크기는 300 바이트이고 오버 헤드는 ~ 30%입니다. 또 다른 100 바이트를 추가하고 오버 헤드는 50%입니다. 즉, 요청을 보내는 데 대략 2 배의 시간과 2 배 대역폭이 필요합니다.

당신은 차라리 조사해야합니다 쿠키 기반 TempData 구현 발자국이 훨씬 작고 실제로 의미가 있습니다.

저장하는 것이 좋습니다 TempData 쿠키에서 (전체 세션과 반대로).

저장하기 위해 TempData 쿠키에서는 재정의해야합니다 ITempDataProvider 자신의 사용자 정의 제공 업체를 구현하십시오.

실제로 사용 가능한 Nuget 패키지가 있습니다 (이 사용자 정의 구현을 수행) : brockallen.cookietempdata 그리고 다음은 문서입니다. 이 패키지의 좋은 점은 압축하고 암호화한다는 것입니다. TempData, 인터넷을 통해 일반 텍스트를 보내는 것에 대해 걱정할 필요가 없습니다.

Nuget 패키지를 설치 한 다음 재정의하는 것만으로도 CreateTempDataProvider 당신의 ControllerBase 수업:

using BrockAllen.CookieTempData;

namespace myProject.web.Controllers
{
    public class ControllerBase : Controller
    {
        // use CookieTempDataProvider instead of default provider
        protected override ITempDataProvider CreateTempDataProvider()
        {
            return new CookieTempDataProvider();
        }
    }
}

이를 위해 세션을 사용해서는 안되지만 대신 프로파일을 사용해야합니다. 프로파일은 쿠키를 사용하여 컴퓨터와 프로파일 등과 일치합니다. 프로파일 키는 쿠키에 저장되며 브라우저를 닫을 때 손실되지 않습니다.

여기에 정보; http://odetocode.com/articles/440.aspx

쿠키에 저장할 데이터 종류에 따라 다르며, 문자열 만 저장하려면 다음 코드가 수행됩니다.

HttpCookie cookie = new HttpCookie("username","sth");
            cookie.HttpOnly = true;
            cookie.Expires = DateTime.Now.AddMonths(3);
            HttpContext.Current.Response.Cookies.Add(cookie);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top