使用$cookies
注销时,我的代码执行:
var deferred = $q.defer()
$http.post( REST.logout, {} )
.finally( function() {
// finally callback is triggered both on success and error,
// since I don't really care if the server is dead or whatever
console.log('out!')
console.log( $cookies['persistent'] )
delete $cookies['persistent']
$cookies['persistent'] = undefined
console.log( $cookies['persistent'] )
deferred.resolve()
})
return deferred.promise
输出是:
out!
"441b5deca5da04cad774a3844b6865dac8a98e91-oi=11"
undefined
然而,cookie不会打扰自己......
正如此问题Can't delete cookie with AngularJS's $cookies中所述,我检查了域名,在我的情况下是相同的,因为我的网络应用程序从domokun.zodiac.lan
运行,而Cookie的域名为.zodiac.lan
我可以补充说,它无法在服务器端重新设置,因为我已经切断了客户端和服务器之间的通信,以便对其进行测试。
你有可能看到我错过的东西会很精彩!
测试角度1.2。[2-5]
答案 0 :(得分:1)
另一种可能性是你可能遇到了我遇到的问题。在我的情况下,我想删除一个在我的应用程序之外创建的cookie,因此它不在同一个域中。我们通过公共门户拦截客户的登录信息以提供用户名/密码。然后,这会创建一个身份验证cookie,以后可以由应用程序读取,然后将请求转发给应用程序。
无论如何,问题在于您必须具体定义要删除的cookie的路径和域。 Angular能够在不指定路径或域的情况下读取此cookie,我能够简单地阅读它:
$cookies.get("MySSOCookie");
但是要删除(当我希望将用户重新定向回到身份验证登陆屏幕时,例如在注销或超时时,我只是通过使用undefined覆盖来完成),我不得不确切地说:
$cookies.put('MySSOCookie', undefined, {domain: '.myCompanyName.com', path: '/'});
答案 1 :(得分:0)
使用原生javascript,这里有些功能可以帮到你:
//set cookies that you need
function setCookie(name, value, expires){
document.cookie = name + "=" + escape(value) + "; ";
if(expires){
expires = setExpiration(expires);
document.cookie += "expires=" + expires + "; ";
}
}
//expiration of your cookie
function setExpiration(cookieLife){
var today = new Date();
var expr = new Date(today.getTime() + cookieLife * 24 * 60 * 60 * 1000);
return expr.toGMTString();
}
//get cookie with namecookie...
function getCookie(w){
cName = "";
pCOOKIES = new Array();
pCOOKIES = document.cookie.split('; ');
for(bb = 0; bb < pCOOKIES.length; bb++){
NmeVal = new Array();
NmeVal = pCOOKIES[bb].split('=');
if(NmeVal[0] == w){
cName = unescape(NmeVal[1]);
}
}
return cName;
}
对于您的问题使用:
setCookie(nameyourcookie,'')
我帮助过你......
答案 2 :(得分:0)
你能用:
$ cookieStore.remove(&#39;持续性&#39);
http://docs.angularjs.org/api/ngCookies/service/$cookieStore
答案 3 :(得分:0)
如果您的Cookie标记为httpOnly
,则可能存在潜在问题。 HttpOnly cookies不能被任何JavaScript阅读。要查看您是否可以阅读cookie,请尝试:
$ document.cookie
在你的控制台中。如果尽管浏览器中存在cookie,它返回一个空字符串,那么这些cookie可能是httpOnly。您还可以在chrome
的Resources选项卡中查找HTTP复选标记要摆脱httpOnly属性,您可以看到服务器框架是否有一些选项。在nodejs / express中,您可以传递这样的标志:
app.use(express.cookieSession({cookie: { httpOnly: false }}));
但是,我不知道这是不是很糟糕的做法,因为它看起来似乎是我们正在谈论的某种会话cookie,应由服务器处理。