编写会话代码以检查会话是否存在的最佳位置

时间:2015-11-02 03:59:23

标签: php codeigniter codeigniter-2 codeigniter-3

使用:PHP MVC CI

我在 function _modalWindowController ($scope, $modalInstance, title,name,data){ $scope.title = ""; if (title) { $scope.title = title; } $scope.name = name; $scope.data = data; $scope.chart = function(title,name,data){ $('#detailChart').highcharts({ ... }) }; //this line does not work! $($scope.chart($scope.title,$scope.name,$scope.data)); $scope.confirm = function () { $modalInstance.close(); }; $scope.cancel = function () { $modalInstance.dismiss(); }; } 中创建了一个名为My_Controller的Controller类。在此Core Folder中,正在检查class是否存在。此session正在所有控制器类中进行扩展。这是代码

controller

问题:在MVC架构中编写<?php class My_Controller extends CI_Controller { function __construct() { parent::__construct(); $this->load->library('session') if(empty($this->session->userdata('userName')) { header('Location: '."Login Url"); } } } ?> 代码是否有更好的位置?

3 个答案:

答案 0 :(得分:0)

您需要在CI中创建挂钩并检查那里的会话。 Hook将调用每个请求,以便您可以在那里写入权限角色。

以下是有关如何编写钩子的详细信息。

  

http://www.codeigniter.com/user_guide/general/hooks.html

答案 1 :(得分:0)

您不必使用session_start();

在控制器中

class My_Controller extends CI_Controller {

    function __construct()
    {
        parent::__construct();      

    }

    public function index($value)
    {
        $session = $this->model_name->check_session();
        if($session==true){
            #valid code         
        }
        else{
            redirect('controller/method');
        }
    }
}

在模型中

public function log_in()
{
    $log = $this->session->all_userdata();

    if (isset($log['userName'])) {
        return true;
    } else {
        return false;
    }
}

答案 2 :(得分:-1)

在hook文件夹中创建文件名auth_hook.php并编写此代码

<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Auth_hook extends CI_Controller {

    private $CI;

    public function __construct() {
        $this->CI = & get_instance();
    }

    public function is_authorized() {
        $uri = $this->CI->uri->segment(1);
        if (strcmp($uri, 'user') && $uri != '') {

            if ($this->CI->session->userdata('logged_in')) {
                return true;
            } else {
                redirect(site_url('user'));
            }
            return true;
        }
        return true;
    }

}