Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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会话是否在设置值时启动?_Php_Codeigniter_Session - Fatal编程技术网

PHP会话是否在设置值时启动?

PHP会话是否在设置值时启动?,php,codeigniter,session,Php,Codeigniter,Session,所以问题是,在PHP中设置任何值时,会话是否可能自动启动,因为我读到您需要调用session\u start(),而在我当前的代码中,我没有在任何地方这样做,所以我不确定这是否真的必要。 有关我的环境的一些信息: 适用于Linux 5.6.8/Ubuntu 14的XAMPP 我使用的是Codeigniter框架3.0.2和PHP版本5.6.8。 是的,我检查了php.ini文件,在那里找不到session.start\u auto,所以我真的很困惑 我的登录页面代码如下所示: i

所以问题是,在PHP中设置任何值时,会话是否可能自动启动,因为我读到您需要调用
session\u start()
,而在我当前的代码中,我没有在任何地方这样做,所以我不确定这是否真的必要。 有关我的环境的一些信息: 适用于Linux 5.6.8/Ubuntu 14的XAMPP 我使用的是Codeigniter框架3.0.2和PHP版本5.6.8。 是的,我检查了php.ini文件,在那里找不到session.start\u auto,所以我真的很困惑

我的登录页面代码如下所示:

        if ($this->login_model->authenticate($data))
            {
                #start session, save necessary data
                $this->load->model('user_model');

                $user = $this->user_model->get_user_by_email($data['email']);

                $_SESSION['user_id'] = $user->user_id;
                $_SESSION['user_email'] = $user->email;
                $_SESSION['user_authenticated'] = TRUE;

                $this->load->helper('url');

                redirect('principal');
            }
然后在每个页面中,我调用一个helper方法,检查用户是否通过以下方式进行身份验证:

public function user_is_authenticated()
    {
        if (!isset($_SESSION['user_authenticated']) || !$_SESSION['user_authenticated'] === TRUE)
        {
            redirect('login');
        }
    }
最后,我的注销页面执行以下操作:

 public function end_session()
    {

     if (session_destroy())
     {
        redirect('login');
     }

    }
问题是它工作得很好,因为如果我不登录,我就无法访问具有该验证方法的页面。因此,我从未使用过
会话\u start()
。我应该吗?在哪里


提前感谢

在codeigniter中,您不需要使用session_start()。只需在config文件夹中的autoload.php文件中自动加载会话库

$autoload['libraries'] = array('session');
有关更多信息,请阅读本教程

或者,您可以使用本机会话进行本机会话读取


在codeigniter中,您不需要使用会话启动()。只需在config文件夹中的autoload.php文件中自动加载会话库

$autoload['libraries'] = array('session');
有关更多信息,请阅读本教程

或者,您可以使用本机会话进行本机会话读取


我应该吗?

$newdata = array(
        'user_id'  => $user->user_id,
        'user_email'     => $user->email,
        'user_authenticated' => TRUE
);

$this->session->set_userdata($newdata)
$user_id = $this->session->userdata('user_id');
if (isset($user_id)) {
    echo $name;
}
else
{
    echo "Not set";
}
不需要。您不必使用
会话\u start()


为什么?

$newdata = array(
        'user_id'  => $user->user_id,
        'user_email'     => $user->email,
        'user_authenticated' => TRUE
);

$this->session->set_userdata($newdata)
$user_id = $this->session->userdata('user_id');
if (isset($user_id)) {
    echo $name;
}
else
{
    echo "Not set";
}
Codeigniter使用
set\u userdata
方法设置会话

会话通常在每次页面加载时全局运行,因此会话类要么在控制器构造函数中初始化,要么由系统自动加载。在大多数情况下,会话类将在后台无人值守地运行,因此只要初始化该类,它就会在必要时读取、创建和更新会话


还有其他事情要做吗??

$newdata = array(
        'user_id'  => $user->user_id,
        'user_email'     => $user->email,
        'user_authenticated' => TRUE
);

$this->session->set_userdata($newdata)
$user_id = $this->session->userdata('user_id');
if (isset($user_id)) {
    echo $name;
}
else
{
    echo "Not set";
}
对。您必须在
autoload.php中加载会话库


如何使用
设置用户数据

$newdata = array(
        'user_id'  => $user->user_id,
        'user_email'     => $user->email,
        'user_authenticated' => TRUE
);

$this->session->set_userdata($newdata)
$user_id = $this->session->userdata('user_id');
if (isset($user_id)) {
    echo $name;
}
else
{
    echo "Not set";
}

如何检查会话是否已设置???

$newdata = array(
        'user_id'  => $user->user_id,
        'user_email'     => $user->email,
        'user_authenticated' => TRUE
);

$this->session->set_userdata($newdata)
$user_id = $this->session->userdata('user_id');
if (isset($user_id)) {
    echo $name;
}
else
{
    echo "Not set";
}

有没有其他资源??

$newdata = array(
        'user_id'  => $user->user_id,
        'user_email'     => $user->email,
        'user_authenticated' => TRUE
);

$this->session->set_userdata($newdata)
$user_id = $this->session->userdata('user_id');
if (isset($user_id)) {
    echo $name;
}
else
{
    echo "Not set";
}

  • 我应该吗?

    $newdata = array(
            'user_id'  => $user->user_id,
            'user_email'     => $user->email,
            'user_authenticated' => TRUE
    );
    
    $this->session->set_userdata($newdata)
    
    $user_id = $this->session->userdata('user_id');
    if (isset($user_id)) {
        echo $name;
    }
    else
    {
        echo "Not set";
    }
    
    不需要。您不必使用
    会话\u start()


    为什么?

    $newdata = array(
            'user_id'  => $user->user_id,
            'user_email'     => $user->email,
            'user_authenticated' => TRUE
    );
    
    $this->session->set_userdata($newdata)
    
    $user_id = $this->session->userdata('user_id');
    if (isset($user_id)) {
        echo $name;
    }
    else
    {
        echo "Not set";
    }
    
    Codeigniter使用
    set\u userdata
    方法设置会话

    会话通常在每次页面加载时全局运行,因此会话类要么在控制器构造函数中初始化,要么由系统自动加载。在大多数情况下,会话类将在后台无人值守地运行,因此只要初始化该类,它就会在必要时读取、创建和更新会话


    还有其他事情要做吗??

    $newdata = array(
            'user_id'  => $user->user_id,
            'user_email'     => $user->email,
            'user_authenticated' => TRUE
    );
    
    $this->session->set_userdata($newdata)
    
    $user_id = $this->session->userdata('user_id');
    if (isset($user_id)) {
        echo $name;
    }
    else
    {
        echo "Not set";
    }
    
    对。您必须在
    autoload.php中加载会话库


    如何使用
    设置用户数据

    $newdata = array(
            'user_id'  => $user->user_id,
            'user_email'     => $user->email,
            'user_authenticated' => TRUE
    );
    
    $this->session->set_userdata($newdata)
    
    $user_id = $this->session->userdata('user_id');
    if (isset($user_id)) {
        echo $name;
    }
    else
    {
        echo "Not set";
    }
    

    如何检查会话是否已设置???

    $newdata = array(
            'user_id'  => $user->user_id,
            'user_email'     => $user->email,
            'user_authenticated' => TRUE
    );
    
    $this->session->set_userdata($newdata)
    
    $user_id = $this->session->userdata('user_id');
    if (isset($user_id)) {
        echo $name;
    }
    else
    {
        echo "Not set";
    }
    

    有没有其他资源??

    $newdata = array(
            'user_id'  => $user->user_id,
            'user_email'     => $user->email,
            'user_authenticated' => TRUE
    );
    
    $this->session->set_userdata($newdata)
    
    $user_id = $this->session->userdata('user_id');
    if (isset($user_id)) {
        echo $name;
    }
    else
    {
        echo "Not set";
    }
    

  • 会话似乎正在使用缓存,您能否在页面顶部转储sessionid并确保它返回空值。此外,我会在浏览器的匿名模式下尝试此操作,以消除缓存的模糊性

    var_dump (session_id())
    

    会话似乎正在使用缓存,您能否在页面顶部转储sessionid并确保它返回空值。此外,我会在浏览器的匿名模式下尝试此操作,以消除缓存的模糊性

    var_dump (session_id())
    

    在codeigniter中,无需使用
    会话\u start()

    只用

    $this->session->set_userdata();// to set the session values.
    


    请查看更多信息。

    在codeigniter中,无需使用
    会话\u start()

    只用

    $this->session->set_userdata();// to set the session values.
    


    请查看更多信息。

    使用
    $this->session->set_userdata()
    。@NiranjanNRaju为什么?我真的看不出你的回答如何回答我的问题。我想我已经足够具体了。会话库@Otroletravaladna我将添加我的答案。使用
    $this->Session->set_userdata()
    。@NiranjanNRaju为什么?我真的看不出你的回答如何回答我的问题。我想我已经足够具体了。会话库@Otroletravaladna我将添加我的答案。非常感谢,我知道魔法应该在哪里发生,不知道在哪里@Otroletravaladna欢迎来到Satck家庭。很高兴能帮助你谢谢你,我知道魔法应该在哪里发生,但不知道在哪里@Otroletravaladna欢迎来到Satck家庭。很高兴能帮你谢谢你的回复!这也回答了我的问题。谢谢你的回答!这也回答了我的问题。