UseModWiki소스수정/파라메터id충돌 페이지의 소스 보기
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: UseModWiki소스수정/파라메터id충돌 는 읽기 전용 페이지입니다.
== # 파라메터 "id" 충돌 == 쿠키에서 사용자 아이디를 나타내는 키가 'id'이고, 위키에서 GET 또는 POST로 요청을 보낼 때 페이지 이름을 나타내는 키도 'id'라서,
GetParam('id')
을 했을 때 페이지 이름이 없으면 그 시점에 로그인한 사용자 아이디가 반환된다. 쿠키에서 사용자 아이디를 나타내는 키를 'userid'로 변경. === # wiki.pl 수정 === 일단 이름에 cookie 또는 userdata가 들어가는 해시 변수의 키를 다 바꿔주는데, 문제는 디스크에 저장된 유저 데이타 파일들
data/user/*.db
내에 키가 'id'로 되어 있다. 이걸 해결하려면 이걸 전부 지우고 새로 아이디를 만들어야 하는데 그건 사람들이 싫어할테니... 유저 데이타 파일을 읽어들인 후 userid 키가 없으면 그 시점에 생성한 후 덮어쓰도록 꼼수 해결을 함. (이거 참 맘에 안 들지만) 수정 내역이 여기저기 흩어져 있어서 그냥 diff 로 보임: {{{#!vim diff diff --git a/wiki.pl b/wiki.pl index 3a18e84..5f89d63 100755 --- a/wiki.pl +++ b/wiki.pl @@ -359,10 +359,10 @@ sub InitCookie { $TimeZoneOffset = 0; undef $q->{'.cookies'}; # Clear cache if it exists (for SpeedyCGI) %UserCookie = $q->cookie($CookieName); - $UserCookie{id} = DecodeUrl($UserCookie{id}); - $UserID = $UserCookie{'id'}; + $UserCookie{'userid'} = DecodeUrl($UserCookie{'userid'}); + $UserID = $UserCookie{'userid'}; &LoadUserData($UserID); - if (($UserData{'id'} ne $UserCookie{'id'}) || + if (($UserData{'userid'} ne $UserCookie{'userid'}) || ($UserData{'randkey'} ne $UserCookie{'randkey'})) { $UserID = 113; %UserData = (); # Invalid. Later consider warning message. @@ -1511,7 +1511,7 @@ sub GetHttpHeader { my $t; $t = gmtime; - if (defined($SetCookie{'id'})) { + if (defined($SetCookie{'userid'})) { ### 로긴할 때 자동 로그인 여부 선택 # $cookie = "$CookieName=" # . "rev&" . $SetCookie{'rev'} @@ -1522,7 +1522,7 @@ sub GetHttpHeader { $cookie = "$CookieName=" . "expire&" . $SetCookie{'expire'} . "&rev&" . $SetCookie{'rev'} - . "&id&" . EncodeUrl($SetCookie{'id'}) + . "&userid&" . EncodeUrl($SetCookie{'userid'}) . "&randkey&" . $SetCookie{'randkey'} . ";"; ### slashlinks 지원 - 로긴,로그아웃시에 쿠키의 path를 동일하게 해줌 @@ -4224,6 +4224,13 @@ sub LoadUserData { %UserData = split(/$FS1/, $data, -1); # -1 keeps trailing null fields ### 관심 페이지 %UserInterest = split(/$FS2/, $UserData{'interest'}, -1); + +# rename cookie 'id' to 'userid' + if ( not exists $UserData{'userid'} and exists $UserData{'id'} ) { + $UserData{'userid'} = $UserData{'id'}; + delete $UserData{'id'}; + SaveUserData(); + } } sub UserDataFilename { @@ -5407,7 +5414,7 @@ sub DoUpdatePrefs { ### 다른 사용자의 환경설정 변경을 금지 my ($status, $data) = &ReadFile(&UserDataFilename($UserID)); if ($status) { - if ((!(&UserIsAdmin)) && ($UserData{'id'} ne $UserID)) { + if ((!(&UserIsAdmin)) && ($UserData{'userid'} ne $UserID)) { print T('Error: Can not update prefs. That ID already exists and does not match your ID.'). '
'; print &GetCommonFooter(); return; @@ -5523,7 +5530,7 @@ sub DoUpdatePrefs { $TimeZoneOffset = &GetParam("tzoffset", 0) * (60 * 60); print T('Local time:'), ' ', &TimeToText($Now), '
'; - $UserData{'id'} = $UserID; + $UserData{'userid'} = $UserID; &SaveUserData(); print '
', T('Preferences saved.'), '
'; print &GetCommonFooter(); @@ -5619,7 +5626,7 @@ sub DoNewLogin { $SetCookie{'randkey'} = int(rand(1000000000)); $SetCookie{'rev'} = 1; %UserCookie = %SetCookie; - $UserID = $SetCookie{'id'}; + $UserID = $SetCookie{'userid'}; # The cookie will be transmitted in the next header %UserData = %UserCookie; $UserData{'createtime'} = $Now; @@ -5685,13 +5692,13 @@ sub DoLogin { $SetCookie{'expire'} = $expire_mode; } - $SetCookie{'id'} = $uid; + $SetCookie{'userid'} = $uid; $SetCookie{'randkey'} = $UserData{'randkey'}; $SetCookie{'rev'} = 1; $success = 1; } else { - $SetCookie{'id'} = ""; + $SetCookie{'userid'} = ""; ### 잘못된 아이디를 넣었을 때의 처리 추가 ### from Bab2's patch $UserID = ""; @@ -5725,7 +5732,7 @@ sub DoLogin { } sub DoLogout { - $SetCookie{'id'} = ""; + $SetCookie{'userid'} = ""; $SetCookie{'randkey'} = $UserData{'randkey'}; $SetCookie{'rev'} = 1; }}} github에서 보려면: [https://github.com/gypark/UseModKr/commit/5b11baf33aed5afac673fa7e191fe315e98616d9 Commit 5b11baf33aed5afac673fa7e191fe315e98616d9 to gypark/UseModKr - GitHub] === # 추가 업데이트 내역 === === # 사용자 의견 ===
---- [[위키위키분류]]
UseModWiki소스수정/파라메터id충돌
페이지로 돌아가기 |
다른 수정본 보기