您好我在Codeigniter中创建了一个会话我已经在我的模型中设置了会话变量。但是当我通过Controller在我的视图中调用会话变量时设置会话变量值后,会话变量值变为null。任何帮助???
更新
这是我的模型,我设置了会话变量
function login ($username, $password)
{
$this->db->where('username' , $username);
$this->db->where('password', $password);
$query = $this->db->get('users');
if ($query->num_rows()>0)
{
foreach ($query->result() as $rows)
{
$data = array(
'user_name' => $rows->username,
'logged_in' => TRUE,
'validated' => true
);
}
$this->session->set_userdata($data);
//$user = $rows->username;
//$this->session->set_userdata('user_name', $user);
return true;
}
else
{
return false;
}
}
这是我的控制器,我将重定向到视图
public function verification()
{
$username = $this->input->post('username');
$password = $this->input->post('password');
$result = $this->site_model->login($username, $password);
//$result = $this->session->set_userdata('validated');
if ($result)
{
//$this->admin();
//$this->session->set_userdata('login_state', TRUE);
redirect ('site/index');
}
else
{
redirect ('site/login');
//$this->load->view('login');
}
}
我在session_start();
construct();
这就是我在视图中访问会话变量的方式
<?php if ($this->session->userdata('user_name') != "") { ?>
.....
答案 0 :(得分:1)
首先在CI中,您不需要在任何地方使用session_start()。只在config / autoload.php文件中自动加载会话。
删除session_start()。 尝试使用flashdata。 Flashdata是临时会话,主要用于您的类型,我们需要将用户重定向到另一个页面并显示一些成功或错误消息。
设置flashdata: $ this-&gt; session-&gt; set_flashdata(&#39; item&#39;,&#39; value&#39;);
获取flashdata: $这 - &GT;会话而&GT; flashdata(&#39;项目&#39);
以下是文档链接http://www.codeigniter.com/user_guide/libraries/sessions.html#flashdata
答案 1 :(得分:0)
使用autoload applications / config / autoload.php,添加会话liblary并删除session_start();
$autoload['libraries'] = array('session');
模型传递数据vithout varibles,你可以这样做:
控制器:
public function verification()
{
$result = $this->site_model->login();
if ($result){
redirect ('site/index');
} else {
redirect ('site/login');
}
}
型号:
public function login()
{
$this->db->where('username' , $this->input->post('username'));
$this->db->where('password', $this->input->post('password'));
$query = $this->db->get('users');
if ($query->num_rows()>0)
{
$res = $query->row_array();
$data = array(
'user_name' => $res['username'],
'logged_in' => TRUE,
'validated' => true
);
$this->session->set_userdata($data);
return true;
} else {
return false;
}
}
答案 2 :(得分:0)
在控制器中设置会话变量..这对我很有用
模型
function Login($email,$pass){
$this->db->where('username' ,$email);
$this->db->where('password',$pass);
$query=$this->db->get('users');
if ($query->num_rows == 1) {
return true;
}
return FALSE;
}
控制器:
function varification(){
$this->load->model('login_model');
$email=$this->input->post('email');
$pass=$this->input->post('pass');
$success=$this->login_model->Login($email,$pass);
if ($success) {
$data = array(
'user_name' => $rows->username,
'logged_in' => TRUE,
'validated' => true
);
$this->session->set_userdata($data);
redirect ('site/index');
} else{ // incorrect id or password
redirect ('site/login');
}
}
现在,如果您回显<?php echo $this->session->userdata('user_name');?>
,它将显示会话用户名。即使在view.hope中,你也可以在任何地方回应它。这将有助于你
答案 3 :(得分:0)
您不需要使用核心php session_start();
确保您已在autoload.php中加载了会话库
为:
$autoload['libraries'] = array("session");
或者您可以手动加载会话库:
$this->load->library('session');
完整文档您可以参考:Read Documentation
答案 4 :(得分:0)
请使用此代码在codeigniter中设置会话
$this->session->set_userdata('user_session', $user_session_data);
我遇到了同样的问题,并且使用此代码解决了。希望它对您也有用。
答案 5 :(得分:0)
在Model中设置会话变量对于任何CMV框架(如codeigniter)都不是一个好主意。编辑模型的login()
函数,以便返回一组很好的信息......
function login ($username, $password)
{
$this->db->where('username' , $username);
$this->db->where('password', $password);
$query = $this->db->get('users');
if ($query->num_rows()>0)
{
foreach ($query->result() as $rows)
{
$data = array(
'user_name' => $rows->username,
'logged_in' => TRUE,
'validated' => true
);
}
return $data;
}
else
{
return false;
}
}
...并从Controller处理会话。
public function verification()
{
$username = $this->input->post('username');
$password = $this->input->post('password');
$result = $this->site_model->login($username, $password);
if ($result == false)
{
redirect ('site/login');
//$this->load->view('login');
}
else
{
$this->session->set_userdata($result);
redirect ('site/index');
}
}
此外,为了使会话数据可用于视图文件,您需要通过控制器传递它们
$data['user_name'] = $this->session->userdata('user_name');
然后你可以在你的视图文件中做任何事情:
<?php if ($user_name != "") { ?>
答案 6 :(得分:0)
您好我认为您需要更改型号代码 您正在设置会话中的数组并在会话中访问直接user_name
我认为以下代码适合您,
function login ($username, $password)
{
$this->db->where('username' , $username);
$this->db->where('password', $password);
$query = $this->db->get('users')->row();
if (count($query) > 0)
{
$this->session->set_userdata('user_name', $query->username);
$this->session->set_userdata('logged_in', true);
$this->session->set_userdata('validated', true);
return true;
}
else
{
return false;
}
}
答案 7 :(得分:0)
请按照以下说明操作。
确保在autoload.php文件中添加了会话库,以便自动加载会话。
当你在codigniter中使用session时,你没有在文件的开头添加session_start(),因为codigniter核心系统会自动处理这个。
最好在控制器而不是模型中设置会话变量。
我希望这可以帮助您解决问题。
感谢。
答案 8 :(得分:0)
这是我的解决方案,希望能帮助..:D
在你的模型中..我复制粘贴代码,但我改变了一点..
function login ($username, $password)
{
$this->db->where('username' , $username);
$this->db->where('password', $password);
$query = $this->db->get('users');
if ($query->result())//if any record
{
$rows = $query->row();
$data = array(
'user_name' => $rows->username,
'logged_in' => TRUE,
'validated' => true
);
$this->session->set_userdata($data);
return true;
}
else
{
return false;
}
}
删除控制器中的session_start(),然后在你的application / config / autoload.php中删除
在这个$ autoload [&#39; libraries&#39;] = array(); =&GT;像这样添加会话 $ autoload [&#39; libraries&#39;] =数组(&#39;会话&#39;);
谢谢..:D
答案 9 :(得分:0)
用户默认的php会话,例如 session_start()
和$_SESSION
,它对我有用。在php codeignatore中