【问题标题】:How to get session from PHP into AngularJS for redirect如何将会话从 PHP 获取到 AngularJS 以进行重定向
【发布时间】:2017-02-05 10:17:55
【问题描述】:

我尝试创建一个登录系统,但我希望会话可以从 PHP 代码中获取。如果会话登录是falsenull,它将重定向到登录页面。 这是我运行的 AngularJS 代码:

app.run(["$rootScope", 'adminService', '$location', function($rootScope, adminService, $location) {
    $rootScope.$on("$routeChangeStart", function() {
        $location.path('/login');
    });
}]);

路由代码:

app.config(function($routeProvider){
    $routeProvider.when('/', {
        templateUrl: 'welcome.html'
    }).when('/administrator', {
        templateUrl: './part/administrator.html',
        controller: 'adminPageControl'
    }).when('/administrator/:id_admin', {
        templateUrl: './part/addit-administrator.html',
    }).when('/alternatif', {
        templateUrl: './part/alternatif.html',
        controller: 'alternatifPageControl'
    }).when('/alternatif/:id_alternatif', {
        templateUrl: './part/addit-alternatif.html'
    }).when('/skala', {
        templateUrl: './part/skala.html',
        controller: 'skalaPageControl'
    }).when('/skala/:id_skala', {
        templateUrl: './part/addit-skala.html'
    }).when('/kriteria', {
        templateUrl: './part/kriteria.html',
        controller: 'kriteriaPageControl'
    }).when('/kriteria/:id_kriteria', {
        templateUrl: './part/addit-kriteria.html'
    }).when('/klasifikasi', {
        templateUrl: './part/klasifikasi.html',
        controller: 'klasifikasiPageControl'
    }).when('/klasifikasi/:id_klasifikasi', {
        templateUrl: './part/addit-klasifikasi.html'
    }).when('/analisis', {
        templateUrl: './part/topsis.php',
        controller: 'analisisPageControl'
    }).when('/login', {
        templateUrl: './login.html'
    }).when('/logout', {
        template: 'logout'
    }).otherwise({
        redirectTo: '/'
    });
});

PHP函数会话代码:

function logincheck(){
    return $_SESSION['authid'];
}

logincheck();

【问题讨论】:

  • 您应该在后端创建一个唯一的会话令牌,而不会将 PHP-Session 状态直接解析到您的客户端。请记住,AngularJS 是为 SPA 设计的。因此,让您的客户端使用 API 与后端通信。例如 RESTful API。用户通过客户端登录后,将唯一的会话令牌返回给客户端。在任何受保护的数据 HTTP 请求上放置并验证此令牌。看一下 oAuth 处理,也是一样的。
  • 如何制作令牌?
  • 例如$token = md5('what-ever-you-want');
  • 我明白了,谢谢林。

标签: javascript php angularjs


【解决方案1】:

另一个答案是正确的。使用 API 与后端通信是一种很好的做法,因为 AngularJS 是为 SPA 设计的。但是,如果您坚持使用会话,那没关系。你可以创建一个路由器比如/api/logincheck

PHP:

public function index()
{
    $res = ['login'=>false];
    if(isset($_SESSION['authid']))
    {
        $res['login'] = true;
    }
    echo json_encode($res);
}

JS:

$http.get('http://XX/api/checklogin').success(function(res){
    if(res.login)
    {
        #handle it
    }
});

【讨论】:

    【解决方案2】:

    您应该在后端创建一个唯一的会话令牌,而不会将 PHP-Session 状态直接解析到您的客户端。请记住,AngularJS 是为 SPA 设计的。因此,让您的客户端使用 API 与后端通信。例如RESTful API。用户通过客户端登录后,将唯一的会话令牌返回给客户端。在每个安全数据 HTTP 请求上放置并验证此令牌。看看oAuth处理,也是一样的。

    您可以像这样创建一个令牌:$token = md5('what-ever-you-want'); 并将其实现到您的 API 逻辑中。在这里您可以找到有关handling security interfaces 的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-10
      • 1970-01-01
      • 2014-05-27
      • 2018-02-25
      • 2011-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多