我正在構建一個J2EE Web應用程序,該應用程序使用帶有OID後端的Oracle SSO作爲認證用戶的手段。無法從Oracle SSO註銷
如果用戶想要使用該應用程序,首先他必須在SSO的登錄頁面上提供有效的登錄名/密碼。
當用戶使用該應用程序時,他可以點擊註銷按鈕;在幕後,與此按鈕相關的操作無效用戶的會話,並使用下面的Java代碼清除了餅乾:
private void clearCookies(HttpServletResponse res, HttpServletRequest req) {
res.setContentType("text/html");
for (Cookie cookie : req.getCookies()) {
cookie.setMaxAge(0);
cookie.setPath("/");
cookie.setDomain(req.getHeader("host"));
res.addCookie(cookie);
}
}
另外,我有一個註銷按鈕相關的一個onclick JavaScript事件,這是爲了
function delCookie(name, path, domain) {
var today = new Date();
// minus 2 days
var deleteDate = new Date(today.getTime() - 48 * 60 * 60 * 1000);
var cookie = name + "="
+ ((path == null) ? "" : "; path=" + path)
+ ((domain == null) ? "" : "; domain=" + domain)
+ "; expires=" + deleteDate;
document.cookie = cookie;
}
function delOblixCookie() {
// set focus to ok button
var isNetscape = (document.layers);
if (isNetscape == false || navigator.appVersion.charAt(0) >= 5) {
for (var i=0; i<document.links.length; i++) {
if (document.links.href == "javascript:top.close()") {
document.links.focus();
break;
}
}
}
delCookie('ObTEMC', '/');
delCookie('ObSSOCookie', '/');
// in case cookieDomain is configured delete same cookie to all subdomains
var subdomain;
var domain = new String(document.domain);
var index = domain.indexOf(".");
while (index > 0) {
subdomain = domain.substring(index, domain.length);
if (subdomain.indexOf(".", 1) > 0) {
delCookie('ObTEMC', '/', subdomain);
delCookie('ObSSOCookie', '/', subdomain);
}
domain = subdomain;
index = domain.indexOf(".", 1);
}
}
然而,我的用戶沒有得到來自SSO登出他們打註銷按鈕後:雖然新的會話是通過調用delOblixCookie()函數(如在某些甲骨文論壇找到)刪除SSO餅乾如果他們嘗試訪問索引頁面時創建,那麼SSO登錄頁面不會顯示給他們,他們可以直接進入到主頁面而無需認證。只有當他們手動從瀏覽器中刪除cookie時,登錄頁面纔會再次顯示 - 而不是我所需要的:用戶每次從應用程序註銷時都必須提供其登錄名/密碼,所以我相信在應用程序中出現錯誤刪除Cookie的代碼。
我非常感謝這個問題的任何幫助,在此先感謝。