HTTP GET 요청에 탭별 데이터 바인딩
브라우저 탭마다 다른 사용자로 로그인할 수 있는 인증 메커니즘을 구현하려고 합니다.
이 시스템의 규칙은 다음과 같습니다.
- 인증 토큰은 로그인한 사용자를 나타냅니다.
- 인증 토큰에는 프라이빗과 퍼블릭 두 가지가 있습니다.
- 각 개인 토큰은 단일 탭에 바인딩되며 계정 정보를 결정합니다.
- 공개 토큰은 모든 탭에서 읽고 쓸 수 있으며 마지막으로 로그인한 계정(모든 탭)을 나타냅니다.
- 사용자가 탭에서 로그아웃하면 개인 및 공개 토큰이 모두 제거됩니다.
- 탭이 인증이 필요한 페이지를 누를 때마다 시스템은 개인 토큰을 읽으려고 합니다.설정되지 않은 경우(새로 만들기/빈칸 탭의 경우), 공용 토큰의 값을 개인 토큰으로 복사합니다.공용 토큰이 설정되어 있지 않으면 인증 화면으로 리디렉션됩니다.
- 탭이 이미 로그인되어 있고 사용자가 링크를 클릭할 때 요청은 사용자 지정 HTTP 헤더에 개인 토큰을 포함해야 합니다.URI에서 이 정보를 보내는 것은 보안상의 이유로 선택사항이 아닙니다.
- 일반 링크와 동일하게 뒤로 가기/뒤로 가기 버튼을 사용하는 기능(즉, 양식 데이터를 다시 제출하라는 메시지가 표시되지 않음).
지금까지 시도한 것:
을 해서.
cookies
개인 토큰과 공개 토큰 모두: 서버는 어떤 쿠키를 찾을지 알 수 없기 때문에 작동하지 않습니다.사용자가 탭 내부에서 링크를 클릭할 경우, 요청은 모든 탭에 걸쳐 모든 쿠키를 전송하고 서버는 어떤 쿠키가 링크를 클릭했는지 알 방법이 없습니다.을 에 저장
sessionStorage
할 때 보낼 할 수 때문에 . 사용자가 링크를 클릭할 때 HTTP GET 요청과 함께 전송해야 하는 사용자 지정 헤더를 지정할 수 없기 때문에 이 방법은 작동하지 않습니다.AJAX를 사용하여 페이지를 요청한 다음 Data URI를 사용하여 메모리의 페이지로 이동: 보안상의 이유로 Internet Explorer에서는 HTML 컨텐츠에 DATA URI를 사용할 수 없습니다.http://msdn.microsoft.com/en-us/library/cc848897%28v=vs.85%29.aspx 참조
을 해서.
<form method="get" enctype="multipart/form-data">
숨겨진 필드를 사용하여 토큰을 전달합니다. entype="typart/form-data"는 POST에 대해서만 지원됩니다.을 해서.
<form method="post" enctype="multipart/form-data">
숨겨진 필드를 사용하여 토큰을 전달합니다. 이론적으로는 이것이 작동해야 하지만 이제 사용자가 뒤로 가기/뒤로 가기 버튼을 사용할 경우 양식 데이터를 다시 입력하라는 메시지가 나타납니다.AJAX를 AJAX를 사용하여 합니다.
document.open(); document.write(); document.close()
. 저는 http://forums.mozillazine.org/viewtopic.php?p=5767285&sid=d6a5a2e8e311598cdbad124e277e0f52#p5767285 과 https://stackoverflow.com/a/4404659/14731 둘 다 시도해 보았고 두 경우 모두 새로운 스크립트를 사용해 보았습니다.<head>
블록은 실행되지 않습니다.
무슨 생각 있어요?
여러 번의 반복 작업을 거친 결과 다음과 같이 구현할 수 있었습니다.
변수
- 데이터 저장소에는 두 가지 종류가 있습니다.
- 다음 변수를 저장합니다.
- 에 DB 됨 됨 포함
publicToken
,nextTabId
. - 에는 session 이 에 됩니다 됩니다 이 에
privateToken
,tabId
.
- 에 DB 됨 됨 포함
퍼블릭토큰,프라이빗상품권
- 인증 토큰의 정의는 https://stackoverflow.com/a/1592572/14731 을 참조하십시오.
- 인증 토큰에는 공개 토큰과 비공개 토큰 두 가지가 있습니다.
publicToken
은 마지막 로그인 작업으로 반환된 토큰으로, 모든 탭에 걸쳐 표시됩니다.privateToken
는 현재 탭의 마지막 로그인 작업에 의해 반환되는 토큰입니다.
tabId
- 하게 은 과 으로 하게 됩니다 됩니다 하게 으로 은
tabId
. nextTabId
는 모든 탭에서 액세스할 수 있는 숫자입니다.- ID 를 ID ID 으로 을 에 를 에 으로
nextTabId
그리고 그 가치를 높여줍니다. - 를 들면 ,
tabId
"com. company.Tab" 값을 가질 수 있습니다.X
여기서 "X
에 의해 반환된 번호입니다.nextTabId
.
로그인/로그아웃
- 마다 이 마다 할
privateToken
그리고.publicToken
서버에서 반환된 인증 토큰을 사용하여 덮어씁니다. - 하면 ㅇㅇㅇ을 합니다.
privateToken
그리고.publicToken
에서, 고,고privateToken
서버 쪽에서.는 .publicToken
서버 쪽에서. - 은 탭이한 , 이, , 합니다를 한다는 것을 합니다.
privateToken
로그아웃됩니다.다른 토큰을 사용하는 모든 탭은 영향을 받지 않습니다. - 한 이 한 한 를 공유할 때
privateToken
탭에서 는 ? 에서 를 는 나 는 을 상속합니다.privateToken
선택할 수 있습니다. - 가 ㅇㅇㅇ을 한다면.
publicToken
에서,이로privateToken
x,publicToken
는 Y해이다로로 탭을 시킵니다.privateToken
로그아웃하려면 Y(바람직하지 않음).
페이지로드시
- HTML 링크를 찾기 위해 페이지를 스캔합니다.
- 링크에 에 를 a 합니다를 합니다.
tabId
URL에 대한 쿼리 매개 변수입니다.은 Δ Δ Δ Δ Δ 값과 .tabId
. - 옷을 벗기
tabId
history.replaceState()를 사용하여 현재 페이지의 URL 매개 변수를 지정하여 사용자가 친구와 링크를 공유할 수 있도록 합니다.tabId
사용자별이므로 공유할 수 없습니다. - 합니다를 합니다.
tabId
cookie (이에 대한 자세한 내용은 아래에 있음).
링크 클릭 시
- 에서 이 됩니다를 .
tabId
쿠키를 만들고 링크를 따라갑니다. - 은 의 은 과 과 .
tabId
과한값값한 값과 한 값.privateToken
서버가 요청을 수신할 때
tabId
변수가개음다를된로가로다를er음개된가osn 로 리디렉션합니다.GetTabId.html?referer=X
에X
URL입니다는재 URL 입니다.- 한다면
tabId
존재하지만 인증 토큰이 잘못되었거나 만료되었습니다. 브라우저를 로그인 화면으로 리디렉션합니다.
GetTabId.html
- 에 에 이 이 없을 경우
privateToken
,알았다.publicToken
안으로privateToken
. - 둘다 ㅇㅇ
privateToken
그리고.publicToken
정의되지 않았습니다. 로그인 페이지로 리디렉션합니다. - 는 에서 URL 를 합니다 합니다 를 이라는 URL 매개 변수를 사용합니다.
referer
성공할 경우 어디로 리디렉션할지 나타냅니다. - 탭에 다음 항목이 있는 경우
privateToken
덧붙이다,tabId
변수를한개수에o수erreferer
페이지를 호출한 후 다시 해당 페이지로 리디렉션합니다. - 사용하다
window.location.replace()
할때때 제거하도록 때GetTabId.html
브라우저 기록에서 확인할 수 있습니다.
쿠키를 계속 삭제/추가하는 이유는 무엇입니까?
- 우리는 각 요청에 따라 서버로 전송되는 쿠키의 수를 최소화하려고 노력합니다.
- 만약 우리가 삭제하지 않았다면.
tabId
쿠키가 페이지 로드되면 탭에서 요청할 때마다 다른 탭의 쿠키도 모두 전송됩니다.
알려진 문제
- Source는 "View Source"가 누락된 . "View Source"는 URL입니다.
tabId
. .로.GetTabId.html
실제 페이지 대신에 - 어색하게 긴 페이지 다시 로드(클라이언트가 로 리디렉션됨)
GetTabId.html
(그리고 원래 페이지로 돌아갑니다).
구현 세부 사항이 길어져 죄송합니다만, 더 쉽고 짧은 해결책을 찾을 수 없었습니다.
언급URL : https://stackoverflow.com/questions/26556749/binding-tab-specific-data-to-an-http-get-request
'programing' 카테고리의 다른 글
SQLSTATE[HY093]:잘못된 매개 변수 번호: 바인딩된 변수 수가 102행의 토큰 수와 일치하지 않습니다. (0) | 2023.09.18 |
---|---|
jboss 7 오라클 데이터 소스 구성 (0) | 2023.09.18 |
웹 앱에 대한 사용자 지정 마우스 오른쪽 단추 클릭 상황에 맞는 메뉴 만들기 (0) | 2023.09.18 |
Oracle 11g - RegEx로 제약 조건 확인 (0) | 2023.09.18 |
MariaDB Active Directory 인증확인 (0) | 2023.09.18 |