【问题标题】:AngularJS way to remove all cookies when browser is closedAngularJS在浏览器关闭时删除所有cookie的方法
【发布时间】:2017-05-21 05:58:08
【问题描述】:

我已经阅读了其他帖子,这些帖子讨论了其他技术在浏览器关闭时清理浏览器 cookie 的方式,但没有一个显示如何让 AngularJS 做到这一点。 如何在 AngularJS 中触发 cookie 清除方法在浏览器关闭时运行?

在 AngularJS 1.4.8 中,可以使用语法 $cookies.remove('keyname') 删除 cookie。我可以编写一个按名称删除所有 cookie 的方法。但是,如何确保在关闭浏览器时调用 cookie 删除方法?如果我希望在关闭浏览器选项卡时调用该方法,语法有什么不同吗?


持续努力:


根据@User2341963 的建议,我在应用程序主模块的run 方法中添加了cookie 删除代码。当我将它放在应用程序的其他位置的 logout() 方法中时,相同的确切代码运行正确,但是当我在 firefox 调试器中放置断点并关闭浏览器时,我看到浏览器关闭时 cookie 删除代码永远不会运行. 当浏览器关闭时,我对代码进行了哪些具体更改以使 AngularJS 将 cookie 全部删除?

这里是应用程序主模块的代码,包括run()方法:

angular
    .module('hello', [ 'ngRoute', 'auth', 'home', 'secure', 'public1', 'navigation' ])
    .config(

            function($routeProvider, $httpProvider, $locationProvider) {

                $locationProvider.html5Mode(true);

                $routeProvider
                .when('/', {
                    templateUrl : 'js/home/home.html',
                    controller : 'home'
                })//plus other routes
                .otherwise('/');

                $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

            }
    ).run(['$cookies', '$window', '$log', function($cookies, auth, $window, $log) {

        //other stuff

        $window.onbeforeunload = function() {
            // Clearing all cookies now!
            $cookies.remove("AUTH1"); 
            $cookies.remove("AUTH2");
            $cookies.remove('procStep');
            $cookies.remove('usrname');
            $cookies.remove('exists');
            $cookies.remove('wid');
        };
    }]);

【问题讨论】:

  • 可能类似于how to trigger a function on window close using angularjs?基本上设置了window.onbeforeunload函数
  • 使用会话 cookie。不用担心清理
  • @user2341963 我应该把它放在哪个控制器中?该应用程序有许多控制器。该应用程序的主模块中只有module().config().run(){}
  • 我会把它放在run 中,类似于this。或者您可以按照建议尝试使用 charlietfl 的会话 cookie
  • @user2341963 我在 OP 末尾添加了代码,显示了我如何尝试实施您的建议,并解释说调试器显示当浏览器关闭时没有调用新的 cookie 清除方法。我还能尝试什么?

标签: javascript angularjs


【解决方案1】:

如果你只需要cookies,因为你需要将它发送到后端服务器,你可以使用主控制器的$destroy事件。

使用$on.$destroy

当控制器即将被销毁时调用此事件。

其他选项是使用 angularjs sessionStorage

自动关闭窗口时删除会话存储

【讨论】:

  • 我无法验证您的答案,因为我现在正在做其他事情。但感谢您和+1 试图帮助其他人解决这个老问题。请其他人对此进行验证并发表评论说明验证。
猜你喜欢
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
  • 2015-06-13
  • 1970-01-01
  • 2018-02-25
  • 2010-12-19
  • 2015-07-03
  • 1970-01-01
相关资源
最近更新 更多