Tim*_*zee 3 php session codeigniter
我一直在youtube上关于CodeIgniter的教程.本教程仅依赖于$username $_SESSION变量,而不涉及$_SESSIONs的其他方面.根据代码点火器文档,$_SESSION你可以简单地用密钥调用会话超全局.这是我的问题开始的地方.
VAR_DUMP($_SESSION)
一个var_dump$ _SESSION提供以下信息(我已经截断等领域,以保持它短)
array (size=5)
'__ci_last_regenerate' => int 1526800056
'' => null
'userID' =>
array (size=1)
0 =>
array (size=14)
'userID' => string '1' (length=1)
'firstname' => string 'Tim' (length=3)
'lastname' => string 'Coetzee' (length=7)
'pword' => string 'xyz' (length=4)
'email' => string 'someone@gmail.com' (length=17)
Run Code Online (Sandbox Code Playgroud)
我想做的事
我只是希望能够$_SESSION像这样调用超级全局$_SESSION['email']或$_SESSION['userID']我想要访问会话变量的方式是完全正确的,因为你应该根据文档进行操作,因此我相信我的问题是在我的控制器()或我设置的方式会话数据()可以在下面看到
问题
让我们说我想在视图中显示userID上面的var_dump()信息,就像我做以下测试...echo $_SESSION['userID'];
以上导致错误
消息:类stdClass的对象无法转换为字符串
好的,但是我应该叫什么对象名称才能说出来firstname?
我根据官方文档尝试了这个
echo $this->session->firstname和echo $this->user_data('userID');
导致相同的错误.
我意识到$ _SESSION数据似乎保存在一个多维数组中,所以我尝试了foreach()这样的
foreach ($_SESSION as $sessions)
{
foreach ($sessions as $value)
{
echo $value;
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我错误:
消息:为foreach()提供的参数无效
然而,在最后一次迭代之后又发生了两次类似的错误,它返回了所有会话的值,所以我猜测我在循环中做错了.
Users_model.php
public function login($username, $password)
{
// Validate
$this->db->where('username', $username);
$this->db->where('pword', $password);
$stmnt = $this->db->get('users');
if($stmnt->num_rows() == 1){
return $stmnt->row(1);
} else {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
Controller.php这样
public function login(){
$data['title'] = 'Sign In';
$this->form_validation->set_rules('username', 'Username', 'required');
$this->form_validation->set_rules('password', 'Password', 'required');
if($this->form_validation->run() === FALSE){
$this->load->view('templates/header');
$this->load->view('users/login', $data);
$this->load->view('templates/footer');
} else {
// Get username
echo $username = $this->input->post('username');
// Get and encrypt the password
echo $password = $this->input->post('password');
// Login user
$user_id = $this->users_model->login($username, $password);
if($user_id){
// Create session
$user_data = array(
'username' => $username,
'userID' => $user_id,
'logged_in' => true
);
$username = user_data ['username'];
$userID = user_data ['userID'];
$logged_in = user_data ['logged_in'];
$this->session->set_userdata($username );
$this->session->set_userdata($userID );
$this->session->set_userdata($logged_in);
// Set message
//$this->session->set_flashdata('user_loggedin', 'You are now logged in');
redirect('pages/index');
} else {
// Set message
// $this->session->set_flashdata('login_failed', 'Login is invalid');
redirect('users/failed');
}
}
}
Run Code Online (Sandbox Code Playgroud)
$ config.php文件
$autoload['libraries'] = array('form_validation','session', 'pagination');
Run Code Online (Sandbox Code Playgroud)
任何帮助建议,或建设性批评赞赏
希望对你有帮助 :
如果您不想像这样更改模型查询集会话
$user = $this->users_model->login($username, $password);
if($user)
{
$user_data = array(
'username' => $username,
'userID' => $user->id,
'logged_in' => true
);
$this->session->set_userdata($user_data);
//$this->session->set_flashdata('user_loggedin', 'You are now logged in');
redirect('pages/index');
}
else
{
// Set message
// $this->session->set_flashdata('login_failed', 'Login is invalid');
redirect('users/failed');
}
Run Code Online (Sandbox Code Playgroud)
打印单个会话密钥,如下所示:
echo $this->session->userdata('username');
echo $this->session->userdata('userID');
echo $this->session->userdata('logged_in');
Run Code Online (Sandbox Code Playgroud)
和整个会议像这样:
print_r($this->session->userdata());
Run Code Online (Sandbox Code Playgroud)
注意:对于CI版本3.1.8,访问如下:
$username = $this->session->username;
$userid = $this->session->userID;
Run Code Online (Sandbox Code Playgroud)
更多https://www.codeigniter.com/user_guide/libraries/sessions.html#retrieving-session-data