2010-04-25 3 views
2

사용자 세션을 확인하고 로그인 상태인지 확인하는 방법에 대한 도움이 필요합니다.ASP 클래식 및 JavaScript에서 세션 상태 확인

jquery를 사용하여 "탭"에 모든 것을로드하는 정적 페이지가 있기 때문에 문제가 발생했습니다. 따라서 사용자가 페이지를 탐색 할 때 실제로 시작한 동일한 페이지를 떠나지 않습니다. 그들이 자신의 프로필이나 기타 등등에 자신의 정보를 클릭하여 클릭 할 때 여전히 로그인되어 있는지 여부를 판단하려고 할 때 내 문제를 암시합니다.

+0

첫 번째로드 후 AJAX를 통한 데이터 가져 오기가 전혀 발생하지 않아도 서버와의 통신은 전혀 없습니다. – AnthonyWJones

답변

1

사용자가 "페이지를 탐색 할 때"서버와 임의의 통신을 만듭니다. 예를 들어 서버에서 필요하지 않더라도 "탭"을 클릭하면 AJAX를 사용하여 어쨌든 서버에 ping을 수행합니다.

물론 현실적으로 모든 사용자가 실제로 그것을 눌러주기 1 시간 전부터 "업데이트"버튼을 응시 할 수있게 된 후에 세션이 라이브 상태인지 확인하고 싶을 것입니다.

두 가지 모두 필요하다면 앱을 바쁘게 읽은 적이있는 사용자를 괴롭 히고 어쨌든 어쨌든 다른 사이트에서의 경험과는 다른 타임 아웃을 발견 할 수 있습니다.

ASP에서는 Session 개체에 무언가를 저장하여 사용자가 로그온되었음을 나타냅니다. 다음은 "로그온 한 페이지"예제입니다. -

<% 
Response.ContentType = "application/json" 
If Session("LoggedOn") Then 
    Response.Write "{loggedOn: true}" 
Else 
    Response.Write "{loggedOn: false}" 
End If 
%> 

이제이 페이지를 핑 대상으로 사용할 수 있습니다. 업데이트 직전에 Ping. 로그 오프 한 경우 서버 업데이트에 대한 세부 정보를 게시하여 업데이트를 수행 할 위치를 지정하는 것이 좋습니다. 평소와 같이 사용자 로그온을 요청하면 페이지로 리디렉션되어 해당 세부 정보를 처리합니다.

+0

고마워, 앤서니. 이미 로그 아웃 된 경우 response.redirect()와 함께 사용하겠습니다. : o) – StealthRT

+0

AJAX의 목적을 무시하고 불필요한 추가 요청을 보내지는 않습니까? –

+0

@thomask : AJAX의 목적은 웹 애플리케이션을 사용할 때 사용자 환경을 개선하는 것입니다. __so__ 응용 프로그램을 서버에서 연결 해제하면 사용자가 실제로 사용하고있는 동안 시간이 초과 될 수 있으므로 좋은 경험이 될 것입니다. 서버 세션을 활성 상태로 유지하면서 작은 __asynchronous__ (AJAX의 첫 번째 A) ping을 사용하는 동안 사용자가 현재 경험에 아무런 영향을 미치지 않습니다. 그러나 그것은 예정된 비 활동으로 인해 세션 시간 제한 문제를 제거합니다. – AnthonyWJones

0
<TITLE>YourStaticPage.aspx</TITLE> 
<% 
    Session("username")="StealthRT" 
    Session("email")="[email protected]" 
    Session("userid")=1 
    Session("LastPageLoad")=System.DateTime.Now 
%> 

당신이 button_click의이 변수가 여전히 ("이름") Session.Contents에 저장되어있는 경우 확인할 수있을 것입니다 당신의 '프로필 업데이트'페이지의 이벤트 또는 Session.Contents ("LastPageLoad"를 처리하는)

1

나는 약간 다른 접근법을 채택 할 것을 권합니다.

사용자가 더 이상 로그인하지 않은 경우 HTTP 상태 401과 같은 특수 상태를 반환하도록 서버 측 데이터 처리 루틴을 디자인하십시오.

그런 다음 클라이언트 측 AJAX 루틴을 사용하여 로그인 화면을 열거 나 표시하십시오. 가급적이면 시도한 작업의 데이터/컨텍스트를 손실하지 않아야합니다.