13

嗨,我已经在 Codeigniter 中创建了一个会话,我已经在我的模型中设置了会话变量。但是在我通过控制器在视图中调用会话变量时设置会话变量值后,会话变量值变为空。有什么帮助???

更新

这是我设置会话变量的模型

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();在下面调用了 in 控制器construct();

这就是我在视图中访问会话变量的方式

<?php if ($this->session->userdata('user_name') != "") { ?>

.....
4

10 回答 10

1

首先,在 CI 中,您不需要在任何地方使用 session_start()。只有在 config/autoload.php 文件中的自动加载会话。

删除那个 session_start()。尝试使用闪存数据。Flashdata 是临时会话,主要用于您需要将用户重定向到另一个页面并显示一些成功或错误消息的情况。

  1. 设置 flashdata: $this->session->set_flashdata('item', 'value');

  2. 获取闪存数据:$this->session->flashdata('item');

这是文档链接http://www.codeigniter.com/user_guide/libraries/sessions.html#flashdata

于 2016-10-28T10:33:25.897 回答
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');?>显,它将显示会话用户名。即使在视图中,您也可以在任何地方回显它。希望这会对您有所帮助

于 2014-01-22T11:59:44.123 回答
0

使用 autoload applications/config/autoload.php,添加 session 库并删除 session_start();

$autoload['libraries'] = array('session');

模型通过发布数据 vithout 变量,您可以这样做:

控制器:

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;
    }
 }
于 2013-08-27T07:41:40.853 回答
0

你不需要使用核心 phpsession_start(); 确保你已经在 autoload.php 中加载了会话库

作为:

$autoload['libraries'] = array("session");

或者您可以手动加载会话库:as

$this->load->library('session');

有关完整文档,您可以参考:阅读文档

于 2015-05-29T13:28:03.380 回答
0

您好,我认为您需要更改模型代码您正在会话中设置数组并在会话中访问直接用户名

我认为下面的代码对你有用,

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;
    }

}
于 2016-10-06T11:11:43.960 回答
0

在模型中设置会话变量对于任何 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;
        }
    }

...并处理来自控制器的会话。

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 != "") { ?>
于 2016-08-19T12:40:56.787 回答
0

请使用此代码在 codeigniter 中设置会话

$this->session->set_userdata('user_session', $user_session_data);

我遇到了同样的问题,并使用此代码解决了。希望它也适用于您!

于 2016-03-16T19:18:15.723 回答
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['libraries'] = array(); => 像这样添加会话 $autoload['libraries'] = array('session');

谢谢你.. :D

于 2016-10-20T07:08:07.260 回答
0

用户默认的 php 会话,比如session_start()and $_SESSION,它对我有用。在 php codeignatore 中

于 2016-11-24T18:53:10.523 回答
0

请按照以下说明进行操作。

确保您在 autoload.php 文件中添加了会话库,以便自动加载会话。

当您在 codigniter 中使用 session 时,您没有在文件开头添加 session_start() ,因为 codigniter 核心系统会自动处理这个。

在控制器而不是模型中设置会话变量是个好主意。

我希望这可以帮助您解决问题。

谢谢。

于 2016-10-12T09:10:43.643 回答