我是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。