如何在重定向之前保留会话数据?

时间:2015-08-27 18:54:23

标签: php codeigniter session redirect

我是PHP和Code Igniter的新手,所以请原谅任何明显明显的错误。

我正在尝试根据从包含其信息的数据表中的Permissions字段读取的内容,重定向登录我们网站的用户。

我已经能够成功重定向到正确的控制器,但问题是,一旦重定向完成,会话数据就会丢失,这告诉我......可能不是我想要这样做的方式。

无论如何,这里有一些代码 -

IF ($this->form_validation->run()){ //<---Form validation.
    IF (!$this->User->login( //<---Attempt to log in the user with POST data
        addslashes(strtolower($this->input->post('username', TRUE))), //<-Username
        addslashes($this->input->post('password', TRUE)), //<- Password
        $this->getIP())){ //<-IP
        /*If the login failed stuff goes here bla bla not relevant.*/
    } ELSE {
        SWITCH($this->User->stale('Permissions')){ //<- This works
            CASE 'ADMIN':
                redirect('Admin');
                BREAK;
            /*Some other stuff but not relevant*/
        }
    }

我在Admin控制器类构造函数中设置了一个断点:

CLASS Admin EXTENDS CI_Controller{
    public FUNCTION __construct(){
        PARENT::__construct(); //<-This gets hit.
        $this->load->model('User_Model', 'User'); //<- So does this, but when the $_SESSION value appears in the Variables view, it only has a single value in it.
        $this->User->ID = $this->session->UserID;
        /*Some other stuff that goes here; again, not relevant.*/
    }
}

然后还有会话数据的设置位置;在User_Model Login( ... )方法中 -

CLASS User_Model EXTENDS MY_Model{ //<----- MY_Model is just an extension of the CI_Model class that lets me use some of our Database stuff. Testing shows that it all checks out.
    public FUNCTION login($userName, $password, $IP){
        $row = $this->database->get_where('users', ARRAY('UserName' => $userName))->row_array()['UserName'];
        IF (!ISSET($row)){
            /*bla bla bad username handle it.*/
        } ELSE {
            /*Check password against username*/
            IF (/*Stuff*/) {
                /*Bla bla bad password handle it.*/
            } ELSEIF(/*check for already logged in*/){
                /*Bla bla logged in already handle it.*/
            } ELSE {
                /*Login was successful and there was much rejoicing (yaaay) handle it...*/
                /*Then I try and set the session values so that they are accessible after the redirect to the Admin controller:*/
                $this->session->UserID = $row['UserID'];
                /*and many others which aren't persisting*/
            }
        }           
}

同样,在PHP和CodeIgniter方面,我很新鲜;另外,我继承了这个项目所以我正在努力学习的很多东西,我正在努力学习,但负责我继承的项目的人并没有做得很好。离开赛道。

我最初的倾向是我的方式,方式 方式 偏离我对$_SESSION的理解,$this->session和/或redirect( ... )适用于..

那么......我在这里做错了什么?我问过类似的问题,其中Flash数据没有持续存在,但我能够解决这个问题,因为我正在重定向,我不应该重定向。

所以,为了切换控制器,我应该在这里重定向吗?如果是这样,我如何通过登录方法保持会话数据集?我已经读过一些东西,告诉我,会话数据需要存储在某个地方的数据表上,这是真的吗?

如果在这种情况下我应该重定向,在确认用户凭证后确定用户的Permissions状态后如何切换控制器?

另外 - 我在类似的问题部分看到一个相当古老的问题,就是这个问题。我看了一下它,发现我需要调整Config文件来处理会话信息,所以我做了。我甚至注意到目录已经创建,并且存在几个文件(非常棒)。但是,一个文件是空的(不太棒)而另一个文件没有任何用处(最不可思议)。

这是我正在运行的session_configuration -

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'SomethingSomething_Session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = '/SomethingSomething_Sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

Cookies配置 - (不确定这是否完全正确)。

$config['cookie_prefix']    = '';
$config['cookie_domain']    = 'localhost';
$config['cookie_path']      = '/';
$config['cookie_secure']    = FALSE;
$config['cookie_httponly']  = FALSE;

如果有任何其他事情相关,我将很乐意分享我能解决此问题的方法。

另外,我应该注意 - 我正在使用Code Igniter 3.0.1。

0 个答案:

没有答案