无法删除Siteminder中的cookies会话PHPSESSID

无法删除Siteminder中的cookies会话PHPSESSID,php,session-cookies,siteminder,Php,Session Cookies,Siteminder,我已经实现了Siteminder SSO登录。一切正常,但我无法删除cookies SMSESSION和PHPSESSID。我已经阅读了其他问题并尝试了代码,但都没有用。我目前使用的代码是: <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Expires" CONTENT="-1"> <script src="http://ajax.googleapis.com/a

我已经实现了Siteminder SSO登录。一切正常,但我无法删除cookies SMSESSION和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>

这将删除除SMSESSION之外的所有Cookie和会话变量。

将Cookie设置为HttpOnly。如果是这种情况,Javascript将无法修改/删除cookie。要检查Cookie是否为http,只有一种更简单的方法是在Firebug的Cookie视图中检查Cookie状态

您还可以使用PHP创建服务器页面并删除该页面中的cookie。当调用页面时,服务器将使用Set Cookie头进行响应,这将Cookie有效性设置为-1

使用JavaScript清理会话cookie不是一个好主意,因为逻辑被发送到浏览器而不是服务器上

如果您正试图从SiteMinder注销,还可以查看在ACO中使用logoffuri参数,该参数指定作为SM注销URL的资源。请注意,如果访问资源,SMSESSION cookie值将设置为LOGGEDOFF,但不会删除其他应用程序会话cookie,如PHPSESSID等

希望这有帮助
Avi

我认为从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域

首先,删除这些cookies是一个非常糟糕的想法/做法

1) 对于PHPSESSIONID cookie,您只需销毁会话。文件


2) SMSESSION由安装在应用服务器上的SiteMinder web代理处理。你不能把它弄糟。如果要销毁SiteMinder会话,只需将用户重定向到SiteMinder安装程序的注销url即可

您好,cookie SMSESSION是HttpOnly。我能以某种方式删除它吗?我创建了另一个服务器页面,并使用php代码(添加在qn中)删除cookie。您应该能够通过从服务器发送回设置的cookie头来删除cookie。确保cookie路径设置为现有cookie。如果路径不同,浏览器将不会删除cookie。您还需要将cookie的有效性设置为过去的某个时间,以便浏览器知道它已过期。您好。我尝试了同样的方法,但在我的案例中,它仍然没有删除cookie会话。但是,我已经更改了Siteminder的配置,SMSESSION不再是HttpOnly。这对应用程序是否有潜在危险?我只是想确保它是正确的,因为现在SMSESSION cookie正在被删除。提前谢谢!
//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();