Php 如何在codeigniter的所有控制器中应用所有会话?
我在创建Php 如何在codeigniter的所有控制器中应用所有会话?,php,mysql,codeigniter,Php,Mysql,Codeigniter,我在创建会话时遇到问题 登录到系统没有错误,我可以打印会话数据,但我的问题是 首先,当我从一个页面移动到另一个页面时,没有会话找到数据,我可以通过写入我的保护URL打开任何函数,而无需在登录页面中传输我 第二:我想在所有控制器中应用所有会话 这是我的代码: 控制器 class Users extends CI_Controller { public function __construct() { parent::__construct(); $t
会话时遇到问题
登录到系统没有错误,我可以打印会话
数据,但我的问题是
首先,当我从一个页面移动到另一个页面时,没有会话
找到数据,我可以通过写入我的保护URL打开任何函数,而无需在登录页面中传输我
第二:我想在所有控制器中应用所有会话
这是我的代码:
控制器
class Users extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->library('session');
// print_r($this->session->userdata);
}
public function Login()
{
if($this->input->post("login"))
{
$this->load->library('form_validation');
$this->form_validation->set_rules("username","UserName",'required|min_length[3]|max_length[30]|alpha');
$this->form_validation->set_rules("password","password",'required|min_length[3]|max_length[30]');
if ($this->form_validation->run())
{
$username=$this->input->post("username");
$password=$this->input->post("password");
$encpassword=md5($password);
$this->load->model("DatabaseModel");
if($info=$this->DatabaseModel->mainlogin($username,$encpassword))
{
if(is_object($info)){
$session_data=array(
'username' => $info->username,
'id' =>$info->id,
'email' => $info->email,
'image' => $info->image
);
$this->session->set_userdata($session_data);
}
$this->session->set_userdata($session_data);
redirect(site_url("Dashboard/index"));
}else{
$this->session->set_flashdata('error', 'Error With Login ');
redirect(site_url("Users/login"));
}
}else{
//error for validation
}
}
$data['pagetitle']="IStore | Login";
$this->load->view("users/login",$data);
//$this->load->view("users/login");
}
public function logout()
{
$this->session->unset_userdata('username');
$this->session->unset_userdata('id');
$this->session->unset_userdata('email');
$this->session->unset_userdata('image');
redirect(site_url("Users/login"));
}
}
这是我的数据库模型
public function mainlogin($username,$password)
{
$this->db->select('*');
$this->db->from("users");
$this->db->where('username',$username);
$this->db->where('password',$password);
$sql=$this->db->get();
return $sql->row();
}
autoload.php
您应该在config文件夹的autoload.php文件中设置会话库
/*
| -------------------------------------------------------------------
| Auto-load Libraries
| -------------------------------------------------------------------
| These are the classes located in the system/libraries folder
| or in your application/libraries folder.
|
| Prototype:
|
| $autoload['libraries'] = array('database', 'session', 'xmlrpc');
*/
$autoload['libraries'] = array('session');
/*
| -------------------------------------------------------------------
|自动加载库
| -------------------------------------------------------------------
|这些类位于system/libraries文件夹中
|或在应用程序/库文件夹中。
|
|原型:
|
|$autoload['libraries']=array('database','session','xmlrpc');
*/
$autoload['libraries']=数组('session');
在autoload.php中设置session之后,您可以在all contoller中获取会话数据,然后您可以检查您的会话是否已销毁,如果您的会话已销毁,则可以从该页面重定向用户
这是如何防止用户不登录就访问页面的答案
我希望这将帮助您是密码哈希刚才注意到您正在使用md5作为密码不是一个好的选择,因为密码varchar上的密码255不再足够安全,因此无法创建哈希,为了验证是否确定,我稍后将转换md5放入我希望您帮助我在我的所有应用程序控制器中应用会话?我建议自动加载config/autoload.php中的会话库,然后您可以访问任何控制器中的会话库。