Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 创建会话并通过codeigniter以唯一id登录用户的最佳方式_Php_Class_Codeigniter_Session - Fatal编程技术网

Php 创建会话并通过codeigniter以唯一id登录用户的最佳方式

Php 创建会话并通过codeigniter以唯一id登录用户的最佳方式,php,class,codeigniter,session,Php,Class,Codeigniter,Session,我一直在code igniter中重建我的社交网络,并在寻找一种最佳方式,在用户登录时启动登录会话(可能与使用code igniters会话类相反?因为我想使用他们在创建帐户时创建的id) 我已经能够创建一个用户和散列和盐他们的密码,并登录他们使用散列密码 我的网站将有很多“登录”和“注销”视图,这些视图因用户是否登录而有所不同 也就是说,在登录时,我想用注册时创建的id启动一个登录会话 这是我的控制器,它记录用户的日志,减去我试图做的事情 function validate_credentia

我一直在code igniter中重建我的社交网络,并在寻找一种最佳方式,在用户登录时启动登录会话(可能与使用code igniters会话类相反?因为我想使用他们在创建帐户时创建的id)

我已经能够创建一个用户和散列和盐他们的密码,并登录他们使用散列密码

我的网站将有很多“登录”和“注销”视图,这些视图因用户是否登录而有所不同

也就是说,在登录时,我想用注册时创建的id启动一个登录会话

这是我的控制器,它记录用户的日志,减去我试图做的事情

function validate_credentials()
{
    $this->load->model('user_model', 'um');
    $login = $this->input->post('submit');
        $this->load->library('encrypt');

    if($login) {
        $user = $this->um->
                    validate(array('email' => $this->input->post('email')));
        if( $user ) {
            if($user->password == $this->encrypt->sha1( $user->salt .
                         $this->encrypt->sha1($this->input->post('password')))) {
                  $this->session->set_userdata( array('email' => 
                                   $this->input->post('email')
                  ));
                  redirect('account/dashboard');
                  exit;
            }
        }
    }
    $this->index();
}

/*---------- EDIT ----------*/
Getting these errors:



  Message: Cannot modify header information - headers already sent by (output started at /Users/mycomputer/Sites/cl_ci_new/application/controllers/auth.php:44)

    Filename: libraries/Session.php

    Line Number: 672

    Message: Cannot modify header information - headers already sent by (output started at /Users/mycomputer/Sites/cl_ci_new/application/controllers/auth.php:44)

    Filename: helpers/url_helper.php

    Line Number: 542

and here are those lines in my code or the Session.php file:

    // Set the cookie
        setcookie(
            this->sess_cookie_name,
            $cookie_data,
            $expire,
            $this->cookie_path,
            $this->cookie_domain,
            $this->cookie_secure
                );
以及url_helpers.php:

switch($method)
        {
            case 'refresh'  : header("Refresh:0;url=".$uri);
                break;
            default         : header("Location: ".$uri, TRUE, $http_response_code);
                break;
        }

我不明白问题是什么……

成功验证后,在会话中保存变量:

if ($user->password == ...) {
     $this->session->set_userdata('logged_in', TRUE);
}
else {
     $this->session->set_userdata('logged_in', FALSE);
}
稍后,如果需要,请检查:

if ($this->session->userdata('logged_in')) {

}

使用用户id启动会话的最佳方式是什么?i、 e.:$user->id并将它们标记为已登录?我已经能够创建会话id,它是一个随机字符串:$this->load->library('session');$session\u id=$this->session->userdata('session\u id');echo$this->session->userdata('session_id');产生这样的结果:821F6D2C05FBF81B8C9F81077D28FE38或者一旦我开始会话,我可以做一些类似于($user->id==logged_in){do stuff}的事情吗?我明白了。我只需要自动加载url帮助程序,错误就消失了。我是否应该这样做:if($user->password==…){$user=$this->session->set_userdata('logged_in',TRUE);}否则{$user=$this->session->set_userdata('logged_in',FALSE);}或者这是多余的?如果需要,您应该在
$logged\u中保存一个变量,并在
$user
变量中保存用户对象及其所有数据。不确定这是什么意思。你说$logged_in=$this->session->set_userdata('logged_in');?我想我想知道如何在变量中显示用户已登录如果您需要在变量中使用它,您可以始终执行
$logged\u in=$this->session->userdata('logged\u in')
,在这种情况下,是的。您可以创建一个名为
logged_in
的类变量,并将其默认设置为
false