2014-10-28 4 views
0

현재 $ window.sessionStorage.token을 사용하고 있습니다. 따라서 사용자가 페이지를 새로 고침하면 데이터 손실없이 세션이 유지됩니다. 하지만 이제는 다른 탭에서 열려고하지만 다시 로그인하도록 요청하고 있습니다. 몇 가지 연구를 한 후 localStorage를 사용해야한다는 것을 알게되었습니다.Anglockjs의 localStorage는 탭 사이에서 공유합니다.

문제점 질문 -

1) 로컬 스토리지를 사용하여 탭간에 세션을 공유하려면 어떻게해야합니까? 2)이 문제에 대한 다른 접근 방법이 있습니까?

나는 대부분의 게시물을 확인 했으므로 잘 이해하지 못했습니다. 누구든지 기본 예제를 통해이를 이해하는 데 도움을 줄 수 있다면 큰 도움이 될 것입니다.

+1

당신이'대체 시도해 봤어 : 당신이 그 코드에서 사용 참조 Authutils 서비스는 브라우저 디버깅 도구를 쉽게 볼 수 있기 때문에 저장된 자원을 더 안전하게 보호하기 위해 http://bitwiseshiftleft.github.io/sjcl/ 스탠포드 자바 스크립트 암호화 라이브러리의 구현입니다 sessionStorage'를'localStorage'로 변경 하시겠습니까? 둘 다 동일한 [스토리지 API] (http://www.w3.org/TR/webstorage/#storage)를 사용합니다. –

+0

나는 시도하지 않았다. 그러나 효과가있었습니다. 너무 어리 석다. 각도 - 로컬 스토리지가있는 사이드 트랙이 있습니다. Thanks – GeekOnGadgets

+0

다른 탭을 통해 액세스하는 경우 같은 탭에서만 sessionStorage 액세스를 사용하는 localStorage를 사용해야합니다.하지만 왜 angularJS를 사용하는 동안 다른 탭에 표시해야하는지 궁금합니다. –

답변

1

각 컨트롤러를 주입하려면 서비스가 필요하고 통합 액세스를 위해서는 $ rootScope가 필요합니다. 각도 응용 프로그램을 사용하여 동일한 작업을 수행하고 있습니다. 당신을 시작하게하는 나의 버전이 여기있다.

angular.module('myApp').service('Dataservice', [ 
'Authutils', 
function Dataservice(Authutils) { 
    var _test = [1, 2, 3]; 

    var hasStorage = function() { 
     if (Modernizr.localstorage) { 
      return true; 
     } else { 
      return false; 
     } 
    }; 

    var _get = function(key, make, init_data) { 
     var out = []; 
     var create = typeof make !== "undefined" ? make : false; 
     var data = typeof init_data !== "undefined" ? init_data : false; 

     if (hasStorage()) { 
      var sval = localStorage.getItem(key); 
      if (!!sval) { 
       try { 
        sval = Authutils.decrypt(sval); 
        out = JSON.parse(sval); 
       } catch (e) { 

       } 
      } else { 
       if (create) { 
        if (data) { 
         data = Authutils.encrypt(data); 
         _set(key, data); 
        } else { 
         _set(key, []); 
        } 
       } 
      } 
     } 
     return out; 
    }; 

    var _set = function(key, value) { 
     if (hasStorage()) { 
      var subject = JSON.stringify(value); 
      localStorage.setItem(key, Authutils.encrypt(subject)); 
      return true; 
     } 
     return false; 
    }; 

    var _drop = function(key) { 
     if (hasStorage()) { 
      localStorage.removeItem(key); 
      return true; 
     } 
     return false; 
    }; 

    var _nuke = function() { 
     if (hasStorage()) { 
      localStorage.clear(); 
      return true; 
     } 
     return false; 
    }; 

    var _push = function(key, value) { 
     var out = []; 
     if (hasStorage()) { 
      var current = JSON.parse(localStorage.getItem(key)); 
      if (!!current) { 
       current.push(value); 
       _set(key, current); 
      } 
     } 
     return out; 
    }; 

    return { 
     get: function(key, make, init_data) { 
      return _get(key, make, init_data); 
     }, 
     set: function(key, value) { 
      _set(key, value); 
     }, 
     push: function(key, value) { 
      _push(key, value); 
     }, 
     trash: function(key) { 
      _cut(key); 
     }, 
     nuke: function() { 
      _nuke(); 
     }, 
     test: function() { 
      return _test; 
     } 
    }; 
    } 
]); 
+0

Very nice :). 플 렁커를 만드시겠습니까? 그래서 우리와 같은 시동기에는 더 나은 이해가 있습니다. 답변 주셔서 감사합니다. – GeekOnGadgets

관련 문제