브라우저를 닫거나 명시적으로 로그인할 때만 asp.net 세션이 만료되도록 명시적으로 설정하려면 어떻게 해야 합니까?

StackOverflow https://stackoverflow.com/questions/93888

  •  01-07-2019
  •  | 
  •  

문제

기본적으로 세션 만료는 20분인 것 같습니다.

업데이트:브라우저가 닫힐 때까지 세션이 만료되는 것을 원하지 않습니다.

업데이트2:이것이 내 시나리오입니다.사용자가 사이트에 로그인합니다.사이트 주변에서 재생됩니다.컴퓨터를 떠나 샤워를 하러 갑니다(>20분 ;)).컴퓨터로 돌아와서 ~해야 한다 놀 수 있습니다.그는 세션 쿠키를 삭제하는 브라우저를 닫습니다.다음에 새 브라우저 인스턴스에서 사이트를 방문하면 다시 로그인해야 합니다.

PHP에서는 이를 달성하기 위해 php.ini의 session.cookie_lifetime을 0으로 설정할 수 있습니다.

도움이 되었습니까?

해결책

세션을 20분 이상 연장하려면 IIS 관리자를 사용하여 기본값을 변경하거나 web.config 파일에서 설정할 수 있습니다.예를 들어 web.config에서 시간 제한을 60분으로 설정하려면 다음을 수행하세요.

<configuration>
  <system.web>
    <sessionState timeout="60" />
    ... other elements omitted ...
  </system.web>
  ... other elements omitted ....
</configuration>

다음을 사용하여 코드에서 특정 사용자에 대해 동일한 작업을 수행할 수 있습니다.

Session.Timeout = 60

어떤 방법을 선택하든 사용자가 다른 작업을 수행하면서도 세션을 계속 유지할 수 있도록 합리적이라고 생각되는 값으로 제한 시간을 변경할 수 있습니다.

물론 단점도 있습니다:사용자의 경우 브라우저를 방치하고 다른 사람이 브라우저를 사용하기 시작할 때 여전히 로그인되어 있는 보안 문제가 있을 수 있습니다.서버의 메모리 사용량 문제가 있습니다. 세션이 길어질수록 한 번에 더 많은 메모리를 사용하게 됩니다.중요한지 여부는 서버의 부하에 따라 다릅니다.

합리적인 연장된 시간 초과를 추측하고 싶지 않다면 이미 제안된 다른 기술 중 하나를 사용해야 합니다. 즉, 브라우저에서 실행되는 일부 JavaScript가 주기적으로 서버를 핑하고/하거나 페이지가 언로드될 때 세션을 중단하도록 요구합니다. (물론 사용자가 사이트의 다른 페이지로 이동하지 않는 경우)

다른 팁

짧은 세션 시간 초과(예: 5분)를 설정한 다음 Javascript를 사용하여 2분마다 XmlHttpRequest를 실행하거나 매 2분마다 자체적으로 새로 고쳐지는 페이지를 가리키는 숨겨진 iframe을 사용하여 페이지가 주기적으로 서버를 폴링하도록 할 수 있습니다. 2분.

브라우저가 닫히면 세션을 계속 유지할 수 있는 방법이 없기 때문에 세션 시간이 꽤 빨리 초과됩니다.

이것은 새로운 문제가 아닙니다. 세션이 종료될 수 있는 모든 방법을 파악하려는 경우 처리해야 하는 몇 가지 시나리오가 있습니다. 다음은 그 중 일부의 일반적인 예입니다.

  1. 브라우저 인스턴스 또는 탭이 닫혀 있습니다.
  2. 사용자가 동일한 브라우저 인스턴스나 탭을 사용하여 웹사이트에서 다른 곳으로 이동합니다.
  3. 사용자의 인터넷 연결이 끊어집니다. 여기에는 사용자 컴퓨터의 전원 손실이나 기타 수단이 포함될 수 있습니다.
  4. 사용자가 컴퓨터에서 멀어집니다(또는 다른 방식으로 사이트와의 상호 작용을 중단함).
  5. 서버의 전원이 꺼지거나 재부팅됩니다.

처음 두 항목은 서버에 정보를 보내는 클라이언트에 의해 처리되어야 합니다. 일반적으로 세션이 빠르게 만료되는 로그아웃 페이지로 이동하려면 자바스크립트를 사용합니다.

세 번째와 네 번째 항목은 일반적으로 세션 상태 제한 시간(시간 제한 없음)을 설정하여 처리됩니다.사용 시간은 사용자가 서버에 부담을 주지 않고 사이트를 사용할 수 있도록 하는 값을 찾는 데 기반합니다.매우 대략적인 경험 법칙은 30분 + 10분일 수 있습니다.그러나 적절한 값은 아마도 다른 게시물의 주제가 되어야 할 것입니다.

다섯 번째 항목은 세션을 저장하는 방법에 따라 처리됩니다.상태에 저장된 세션은 컴퓨터의 RAM에 있으므로 재부팅 후에도 유지되지 않습니다.DB 또는 쿠키에 저장된 세션은 재부팅 후에도 유지됩니다.적절하다고 생각되는 대로 이를 처리할 수 있습니다.

이전에 이 문제가 발생했을 때 제한된 경험으로 볼 때 세션 시간 초과를 허용 가능한 값으로 설정하는 것만으로도 충분하다고 판단되었습니다.그러나 그것은 가능합니다.

이는 기본값입니다.세션이 있으면 해당 세션을 "세션 쿠키"에 저장하며, 브라우저를 닫으면 자동으로 삭제됩니다.

두 브라우저 세션 사이에 세션을 유지하려면 기능에서 Cookie.Expired를 날짜로 설정해야 합니다.

당신이 말하는 세션은 클라이언트가 아닌 서버에 저장되기 때문에 당신이 원하는 것을 할 수 없습니다.

그러나 ASP.NET 서버 측 세션을 사용하지 않고 대신 쿠키에만 의존하는 것을 고려하십시오.

불행하게도 웹의 명시적인 특성과 웹사이트 서버와 사용자 브라우저 사이에 영구적인 링크가 없다는 사실로 인해 사용자가 언제 브라우저를 닫았는지 알 수 없습니다.구현할 수 있는 이벤트와 JavaScript가 있습니다(예:onunload) 서버에 다시 전화를 걸어 세션을 '종료'할 수 있는 데 사용할 수 있습니다. Session.Abandon();

web.config 내에서 세션의 시간 초과 길이를 설정할 수 있습니다. 이 시간 초과는 사용자 브라우저가 서버에 대한 마지막 호출을 수행한 이후의 시간을 기준으로 한다는 점을 기억하세요.

브라우저 시간 초과가 추가되지 않았습니다.

창이 닫히는 시점에 클라이언트와 서버 간에 어떤 방식으로든 통신하지 않으면 세션을 명시적으로 지울 수 있는 방법이 없으므로 창을 받는 시점에 세션을 지우는 특수 URI 요청을 보낼 것으로 예상됩니다. 메시지를 닫습니다.

내 Javascript는 실제 지침을 제공하기에 충분하지 않습니다.죄송합니다 :(

HTML 클라이언트의 응답 방식을 제어할 수 없으므로 할 수 없습니다.

실제로 왜 그렇게 해야 합니까?누구도 다시 사용할 세션을 선택할 수 없는 한 해당 세션은 20분 후에 만료됩니다.리소스가 중요하다면 보다 공격적인 세션 만료를 설정하거나(대부분의 호스팅 회사가 그렇게 했으며 이는 매우 짜증나는 일입니다) 세션에서 더 적은 개체를 사용하십시오.어떤 종류의 객체도 피하고 대신 검색을 위해 키를 저장하십시오. 이는 규모가 커지면 세션을 상태 서버로 확장하는 데 도움이 되므로 매우 중요한 디자인입니다.

귀하의 질문의 의도를 잘못 읽었다면 정정하십시오. 그러나 근본적인 질문은 사용자가 브라우저를 닫을 때 세션을 강제로 종료하는 방법에 대한 것이 아니라 브라우저가 닫힐 때까지 세션이 종료되지 않도록 방지하는 방법에 관한 것 같습니다.

이에 대한 실제 대답은 세션을 사용하여 수행하는 작업을 재평가하는 것이라고 생각합니다.상태를 유지하기 위해 이를 사용하는 경우 운이 좋지 않을 수 있다는 다른 답변에 동의합니다.

그러나 선호되는 접근 방식은 브라우저가 닫힐 때 만료되는 쿠키와 같이 브라우저 세션과 동일한 범위를 가진 지속적인 상태 메커니즘을 사용하는 것입니다.해당 쿠키에는 마지막 요청 이후 만료된 경우 서버에서 세션을 다시 시작하는 데 충분한 정보가 포함될 수 있습니다.상대적으로 짧은(5-10분) 세션 시간 제한과 결합하여 이것이 서버 리소스 사용과 사용자가 지속적으로 사이트를 "재부팅"하지 않도록 하는 것 사이에서 최상의 균형을 제공한다고 생각합니다.

아 질문을 다시 작성하셨습니다.

자바스크립트가 살아있는 한 그것은 절대적으로 가능합니다.시간 제한이 있는 Ajax를 사용하면 됩니다.프로토타입 라이브러리로 확인 http://www.prototypejs.org ajax + 타이머 플러그인을 사용하는 PeriodicalExecutor 또는 jQuery.실행자가 수시로 호출할 더미 페이지를 설정하여 그가 로그아웃하거나(동시에 Ajax 타이머 종료) ​​브라우저를 닫거나(어쨌든 실행자가 종료됨을 의미함) 세션이 항상 살아 있도록 하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top