문제

많이 검색 한 후에 나는 어떤 답을 얻지 못했고 마침내 나는 당신에게 돌아와야했습니다. 아래에서 나는 내 문제를 자세히 설명하고 있습니다. 너무 길어서 독서를 그만 두지 마세요. 간단한 언어로 내 문제를 설명했습니다.

ASP.NET MVC 프로젝트를 개발하고 있습니다. 표준 ASP.NET 역할 및 멤버십을 사용하고 있습니다. 모든 것이 잘 작동하지만 기억은 전혀 작동하지 않습니다. 작업의 모든 세부 사항을 나열하고 있습니다. 이 문제를 해결하도록 도와 줄 수 있기를 바랍니다.

나는 단순히 이것을 필요로한다 :

웹 응용 프로그램에 로그인하려면 사용자가 필요합니다. 로그인하는 동안 기억 나게 또는 그없이 로그인 할 수 있습니다. 사용자가 기억 나게 로그인하면 브라우저가 오랫동안 기억하기를 원합니다. 그들이하는 방식 www.dotnetspider.com, www.codeproject.com, www.daniweb.com 및 기타 여러 사이트에서. 사용자가 나를 기억하지 않고 로그인하면 브라우저는 약 20-30 분 동안 웹 사이트에 액세스 할 수 있어야하며 그 후 세션이 만료되어야합니다. 사용자가 로그인하면 로그 아웃하지 않고 브라우저를 종료 할 때 세션이 만료되어야합니다.

참고 : 사용자를위한 내 자신의 talbes를 만들고 내 데이터베이스 테이블에 대해 인증하고 다른 프로젝트에서 쿠키 및 세션을 설정하여 표준 ASP.NET 역할 및 멤버십을 사용하지 않고 위의 기능을 성공적으로 구현했습니다. 그러나이 프로젝트의 경우 처음부터 시작하여 표준 ASP.NET 역할 및 멤버십을 사용했습니다. 우리는 그것이 작동 할 것이라고 생각했고 테스트 시점에 모든 것이 제작 된 후에는 작동하지 않았습니다. 이제 기존 기능을 표준 ASP.NET 역할 및 멤버십으로 바꾸는 것을 내 사용자 지정 사용자 테이블 및 모든 것들로 바꿀 수는 없습니다.

표준 ASP.NET 역할과 멤버십 기능을 갖춘 일종의 버그가 있거나 표준 ASP.NET 역할 및 멤버십이 잘못된 개념이 있습니다. 나는 내가 위에서 원하는 것을 언급했다. 나는 그것이 매우 간단하고 합리적이라고 생각합니다.

제가 한

  1. 사용자 이름, 비밀번호로 양식을 로그인하고 Me Field를 기억하십시오.
  2. web.config에서 내 설정 :

    u003Cauthentication mode="Forms">
    u003Cforms loginUrl="~/Account/LogOn" timeout="2880"/>
    u003C/authentication>

  3. 컨트롤러 작업에는 다음과 같습니다.

    formsauth.signin (username, Rememberme);

    public void signin (String username, bool createPersistentCookie) {formsAuthentication.setAuthCookie (username, createPersistentCookie); }

이제 문제가 다음과 같습니다.

나는 이미 위의 섹션에서 "나는 단순히 이것을 필요로한다"고 언급했다. 사용자는 시스템에 성공적으로 로그인 할 수 있습니다. 그들의 세션은 web.config에서 시간 초과 값으로 지정된만큼 몇 분 동안 존재합니다. 나는 또한 내 web.config의 샘플을 주었다. 내 샘플에서 시간 초과를 5 분으로 설정하면 5 분 후에 사용자 세션이 만료되면 괜찮습니다. 그러나 사용자가 브라우저를 닫고 브라우저를 다시 열면 사용자는 "타임 아웃"에 지정된 시간까지 로그인하지 않고도 웹 사이트를 입력 할 수 있습니다. 타임 아웃 값에 대한 슬라이딩 만료도 잘 작동합니다. 이제 사용자가 체크인을 통해 시스템에 로그인하면 5 분 후에도 사용자 세션이 만료됩니다. 이것은 좋은 행동이 아닙니다. 나는 사용자가 시스템에 로그인하면 시스템에서 로그 아웃하지 않을 때까지 오랫동안 기억해야한다는 것을 의미합니다. 또는 사용자가 브라우저에서 모든 쿠키를 수동으로 삭제하지 않을 때까지 오랫동안 기억해야합니다. 사용자가 기억하지 않고 시스템에 로그인하면 Web.config에 지정된 시간 초과 기간 값과 사용자가 브라우저를 닫는 경우 세션이 만료되어야합니다. 문제는 사용자가 브라우저를 닫고 다시 열면 로그인하지 않고도 웹 사이트를 입력 할 수 있다는 것입니다.

이 주제에 대해 인터넷을 많이 검색하지만 솔루션을 얻을 수 없었습니다. 블로그 게시물에서 (http://weblogs.asp.net/scottgu/archive/2005/11/08/430011.aspxScott Gu가 정확히 같은 주제로 만들었습니다. 사용자는 Scott 씨가 제공 한 쉬운 해결책이 없다는 의견에서 동일한 내용에 대해 불평하고 있습니다.

다음 장소에서 읽었습니다.http://weblogs.asp.net/scottgu/archive/2005/11/08/430011.aspx http://geekswithblogs.net/vivek/archive/2006/09/14/91191.aspx

나는 이것이 로트의 사용자의 문제라고 생각합니다. Scott Gu.

당신의 도움은 정말 감사하겠습니다. 미리 감사드립니다.

도움이 되었습니까?

해결책

당신이하고 싶은 것은 기억이 나지 않을 때와 Rememberme 옵션을 확인할 때 시간 초과가 다릅니다. 불행히도 SetauthCookie 방법을 사용하면 만료를 수동으로 설정할 수 없으므로 직접 수행해야합니다.

그렇다면 문제는 어떻게해야합니까?

ASP.NET MVC는 System.web.security의 Formsauthentication 클래스를 사용하여 구성 설정 및 Cookieless 브라우징 및 SSL을 지원하려는 경우 사소하지 않지만 간단히 그렇게한다고 생각합니다.

int timeout = rememberMe ? 525600 : 30; // Timeout in minutes, 525600 = 365 days.
var ticket = new FormsAuthenticationTicket(userName, rememberMe, timeout);
string encrypted = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted);
cookie.Expires = System.DateTime.Now.AddMinutes(timeout);// Not my line
cookie.HttpOnly = true; // cookie not available in javascript.
Response.Cookies.Add(cookie);

... 당신은 필요한 것의 기본 버전을 얻을 수 있습니다.

참고 :이 코드를 테스트하지 않았습니다.

다른 팁

케빈과 데이브, 너희들 락, 남자.

Dave, 코드 외에도 작동하도록 한 줄을 추가해야했습니다. 나는 그것을 적어도 1 년 동안 기억하게한다는 것을 의미합니다. Cookie.expires에 값을 할당하여 코드를 작동시켜야했습니다. 이 라인 쿠키 .expires가 설정되지 않으면 컴퓨터 재시작 후 쿠키가 손실됩니다. 세션이 끝날 때 의미합니다. 나는 이것을 Firefox에서 알아 차렸다. 쿠키의 세부 사항을 살펴 보았고 다음과 같이 찾았습니다. 쿠키 .expires가 설정되지 않으면 "만료 :"Firefox의 속성은 "세션이 끝날 때"입니다. : "Firefox의 속성은 쿠키 값이 설정된 DateTime입니다.

코드는 다음과 같습니다.

int timeout = createPersistentCookie ? 525600 : 2; // Timeout in minutes,525600 = 365 days
var ticket = new FormsAuthenticationTicket(userName,createPersistentCookie,timeout);            
string encrypted = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted);
cookie.Expires = System.DateTime.Now.AddMinutes(timeout);//My Line
HttpContext.Current.Response.Cookies.Add(cookie);

감사합니다. 정말 훌륭한 해결책이었습니다.

해당 문제에 착륙 할 수있는 사람을 위해 공유 환경에서 멤버십 인증 티켓을 사용하는 것에 대한 간단한 메모. 나는 Godaddy에 MVC 사이트 Runnig를 가지고 있었고 나를 기억하는 데 어려움을 겪었습니다. 이것은 해결책이었습니다.

<system.web>
<machineKey
  validationKey="4C6404A3B305CD6E8CFEAC258F042FB95E45E9C3C2CEC3AAB838996CFBE661E41DF1A1BAC75B9B45E02147612FD9B71CA74DDA50B0D0D6ED11F0BB8E31048953"
  decryptionKey="BC471CF17A97B08A9DF85C7B502AD95680E3BE4418FD9C6CEA57E7F97ED64291"
  validation="SHA1" decryption="AES"
/>

감사합니다 :http://www.geekfreeq.com/aspnet-remember-me-option-forms-authentication-not-working/

그것은 문제가 아닙니다. 기능입니다 :)

사용자 세션은 아직 만료되지 않았으므로 브라우저를 닫고 다시 열더라도 쿠키는 여전히 좋습니다.

사용자 세션을 무효화하는 것은 쿠키의 만료입니다.

나는 같은 것을 구현했고 테스트 할 때 Mozila에서는 잘 작동하지만 모든 PC에서 IE8에서 작동하지는 않았지만 IE에서 쿠키를 수락하도록 설정을 업데이트했지만 여전히 작동하지 않습니다.

인터넷 익스플로러 8.x

  1. 도구 메뉴를 클릭하십시오.
  2. 메뉴에서 인터넷 옵션을 선택하십시오 - 새 창이 열립니다.
  3. 창 상단 근처의 개인 정보 보호 탭을 클릭하십시오.
  4. 창의 기본 버튼을 클릭하십시오.
  5. 슬라이더가 중간 높이 미만의 레벨 중 하나에 있도록 슬라이더를 이동하십시오 (중간, 낮음, 모든 쿠키를 허용).
  6. 확인을 클릭하여 변경 사항을 저장합니다.
  7. 이제 쇼핑 카트에 품목을 추가 할 수 있어야합니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top