Angular 8 - 使用CookieService清除Cookies

3
我想清除我的应用程序在浏览器中保存的所有信息,无论是在sessionStorage、localStorage还是cookies中。
我添加了这个小方法来实现清除,并在我的一个组件的ngOnInit中调用它:
export class SomeComponent implements OnInit {

    constructor(private cookieService: CookieService) {}

    ngOnInit(): void {
        this.clearAppData();
    }

    private clearAppData(): void {
        sessionStorage.clear();
        localStorage.clear();
        this.cookieService.deleteAll();
}
sessionStoragelocalStorage似乎已清除,但我注意到cookie并没有被清除。 我需要通过浏览器手动清除cookie。
此外,有时我会看到cookie保存在根路径下,有时则是相对根路径下。我不确定这是什么原因,有时发送错误的cookie,所以我想在获取新cookie之前清除所有内容。

enter image description here

任何建议我做错了什么? 谢谢!

使用CookieService编辑问题。 - Dino
4个回答

4

我也遇到了同样的问题。 如果你的Cookie是定制的,意味着它使用了secure、Strict和Path等规范,那么你需要按照规范清除Cookie。

this._cookieService.delete("cookie名称","/","域名",true,"None");

我相信这对你也会起作用。


抱歉回复晚了,不过我已经不再使用Angular进行开发了,但是我认为它是正确的选择。 - MightGod

1

我假设您使用ngx-cookie-service?

请检查代码的执行顺序并将路径设置为“/”

我一直在尝试,似乎设置具有相同名称的cookie会覆盖现有的cookie。因此,如果顺序不正确,则看不到删除cookie。

我没有时间检查您提到的路径部分。 我没有实现带有路径的路由器,看看是否可以帮助您解决问题。

使用以下命令设置cookie:

Service.setcookie('name', 'value', int, '/');

使用以下命令删除cookie:

CookieService.deleteAll()

也可以在ngOnInit()中使用

我非常确定这是执行顺序和提供路径为“/”。

那就没问题了。

很抱歉代码不太好看,我现在正在用手机上网,如果需要,稍后会更新。 我必须离开我的电脑。


1
在开发环境中,任何使用UI框架的客户端应用程序都需要调整以下服务端会话cookie代码。
注意:在您的后端服务器上,您需要将httpOnly的cookie设置为False,如下所示的代码。
cookie: {
       secure: false, //set this to true in production over https
       httpOnly: false, //set this to false in development to test delete 
       ....
       ....
}

稍后,在您的Angular服务代码中,对于注销方法,请使用以下方式:
logout(){

this.cookieService.delete('<your-cookie-name>', '/', 'localhost', false, 'Lax');

}

请查看ngx-cookie-service文档

对于单个删除:

delete( name: string, path?: string, domain?: string, secure?: boolean, sameSite: 'Lax' | 'None' | 'Strict' = 'Lax'): void;

批量删除:
deleteAll( path?: string, domain?: string, secure?: boolean, sameSite: 'Lax' | 'None' | 'Strict' = 'Lax' ): void;

重要提示:在生产环境中,Cookie的httpOnly和Secure都应该设置为True以保证Cookie安全。


0
你无法在前端删除一个 httpOnly cookie,因为它是不可通过JS访问的,正如this post中所说。
要删除 httpOnly cookie,你必须向后端发起HTTP调用,并在数据库中删除该cookie。你可以设置一个新的过期日期来使客户端上的cookie过期。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接