我已经实现了Siteminder SSO登录。一切正常,但我无法删除cookies和PHPSESSID。我读过其他的问题,试过了密码,但都没有用。我目前使用的代码是:
<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Expires" CONTENT="-1">
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js"></script>
<script language="JavaScript">
function delCookie() {
alert("inside delete cookie");
var expireNow = new Date();
document.cookie = "SMSESSION=; expires=Thu, 01-Jan-70 00:00:01 GMT; domain=.<domain>.<com>; path=/";
document.cookie = "SMTRYNO=0; domain=.<domain>.<com>; path=/";
document.cookie = "JSESSIONID=; domain=.<domain>.<com>; path=/";
document.cookie = "sapj2ee_*=; domain=.<domain>.<com>; path=/";
document.cookie = "MYSAPSSO2=; path=/";
document.cookie = "SMSESSION=NO; domain=.<domain>.<com>; path=/";
// alert(document.cookie);
location.href = "http://www.<domain>.<com>";
}
</script>任何帮助都将不胜感激!用于删除以下添加的cookie的PHP代码:
//remove session vars
session_unset();
// sends as Set-Cookie to invalidate the session cookie
if (isset($_COOKIE[session_name()])) {
$params = session_get_cookie_params();
setcookie(session_name(), '', 1, $params['path'], $params['domain'], $params['secure'], isset($params['httponly']));
}
//try for SMSESSION
//$params = session_get_cookie_params();
//setcookie(session_name(), '', 0, $params['path'], $params['domain'], $params['secure'], isset($params['httponly']));
$cookies = explode(';', $_SERVER['HTTP_COOKIE']);
foreach($cookies as $cookie)
{
$mainCookies = explode('=', $cookie);
$name = trim($mainCookies[0]);
setcookie($name, '', 1);
setcookie($name, '', 1, '/');
}
// Finally, destroy the session.
session_destroy();这将删除除SMSESSION之外的所有cookie和会话vars。
发布于 2014-12-31 12:24:51
首先,删除那些cookie是一个非常糟糕的想法/实践。
1)对于PHPSESSIONID cookie,只需销毁会话即可。文档这里
2) SMSESSION由安装在应用服务器上的SiteMinder web代理处理。你不能乱搞它。如果要销毁SiteMinder会话,只需将用户重定向到siteminder设置的注销url即可。
发布于 2014-11-19 11:45:11
我不认为从cookie中删除HttpOnly标志是个好主意。此标志确保页面上的脚本无法读取cookie。让Javascript删除SMSESSION cookie是一个非常糟糕的主意,您也不应该在注销时使用JS。
您无法从服务器清理cookie的原因可能是cookie域的原因。如果您使用工具来跟踪请求,您应该能够在请求和响应中看到SMSESSION cookie的域。如果域不匹配,即使发送无效的cookie头,浏览器也不会删除cookie。通常用于a.b.c域名、应用程序cookie(PHP会话等)将被映射到a.b.c,但是SiteMinder cookie被映射到b.c域。
发布于 2014-11-17 23:43:10
是否将cookie设置为HttpOnly。如果是这样的话,Javascript将无法修改/删除cookie。要检查Cookie是否是HttpOnly,一种更简单的方法是检查Firebug的Cookie视图中的Cookie状态。
您还可以在PHP中创建一个服务器页面,并删除该页面中的cookie。当页面被调用时,服务器将使用Set-Cookie头进行响应,这将把cookie有效性设置为-1。
使用JavaScript清理会话cookie并不是一个好主意,因为逻辑被发送到浏览器而不是服务器上。
如果您试图从SiteMinder中注销,您还可以在ACO中使用logoffuri参数,该参数指定的资源是SM注销URL。请注意,如果资源被访问,SMSESSION cookie值将被设置为LOGGEDOFF,但其他应用程序会话cookie(如PHPSESSID等)将不会被删除。
希望这能帮到阿维
https://stackoverflow.com/questions/26965156
复制相似问题