로그아웃 직후에 상단메뉴에 여전히 로그아웃 링크가 남아있는 문제 해결
- 로그인한 상태에서 로그아웃 링크를 클릭했을 경우, 로그아웃이 되었다는 말은 나오는데 상단 메뉴에는 여전히 "로그아웃"으로 링크가 존재한다. 이 상태에서 다시 다른 페이지로 가거나 로그아웃 링크를 한 번 더 눌러야만 "로그인"으로 바뀐다.
- 이 문제에 대해 Bab2 님이 /사용자의견 란에 패치를 작성해 주셨는데, 주인장은 사용자ID 에 관한 부분은 될 수 있는 한 건드리지 않으려 한다. 그 이유는 환경설정에서 사용할 수 없는 아이디를 넣었을 때의 처리 문제 해결 섹션에서 언급한 것처럼 사용자ID 의 개념이 오리지널 UseModWiki 와 다르기 때문이다. 따라서, 여기서는 최소한 영향을 덜 미치면서 문제를 해결하는 꽁수를 택했다.
- 부작용: 아직 모름 -_-;
- 문제의 원인은, 처음에 로그아웃 버튼을 클릭하면 logout result 화면이 출력되는데, "메뉴바를 출력하는 시점 이후"에 실제로 로그아웃 동작을 수행한다는 것이다. 즉 메뉴바가 출력되는 순간에는 아직 로그아웃되지 않은 상태이고, 따라서 여전히 로그아웃 버튼이 출력된다. 그렇다고 해서 실제 로그아웃 동작 부분을 메뉴바 출력보다 앞서서 할 경우, 이번에는 본문창의 메세지가 제대로 출력되지 않는다.
- 메뉴바를 출력할 때는, UserID 가 113 또는 112 면 "login" 을, 그렇지 않으면 "logout" 을 출력하게 되어 있다. 따라서 이 패치에서는, logout result 화면에서 상단 메뉴를 출력하기 전에 UserID 를 임시로 113 으로 만들고, 상단 메뉴를 출력한 후에 다시 UserID 값을 복원한 이후 나머지 로그아웃 과정을 수행하도록 한다.
- GetHeader() 함수와 그 안에서 호출되는 모든 함수 안에서 UserID 가 얼마나 사용되느냐에 따라서 부작용의 규모가 달라질 것이다.
- 현재로서는 상단 메뉴 말고는 UserID 에 민감한 동작을 하는 루틴을 찾지 못했다. 특별한 문제는 없을 것이라 희망한다.
-
sub DoLogout {
...
$SetCookie{'rev'} = 1;
my $tempUserID = $UserID;
$UserID = "113";
print &GetHeader('', T('Logout Results'), '');
$UserID = $tempUserID;
if (($UserID ne "113") && ($UserID ne "112")) {
print Ts('Logout for user ID %s complete.', $UserID);
}
...
}
위키위키분류