首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法删除Siteminder中的cookies,PHPSESSID

问无法删除Siteminder中的cookies,PHPSESSID
EN

Stack Overflow用户
提问于 2014-11-17 03:41:47
回答 3查看 2.4K关注 0票数 0

我已经实现了Siteminder SSO登录。一切正常,但我无法删除cookies和PHPSESSID。我读过其他的问题,试过了密码,但都没有用。我目前使用的代码是:

代码语言:javascript
复制
        <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代码:

代码语言:javascript
复制
//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。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-31 12:24:51

首先,删除那些cookie是一个非常糟糕的想法/实践。

1)对于PHPSESSIONID cookie,只需销毁会话即可。文档这里

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

票数 1
EN

Stack Overflow用户

发布于 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域。

票数 1
EN

Stack Overflow用户

发布于 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等)将不会被删除。

希望这能帮到阿维

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26965156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档