设置值时PHP会话是否启动


Does PHP Session start when setting a value?

所以问题是,如果它是可能的会话在PHP是自动启动时设置任何值,因为我读到,你需要调用session_start()和在我目前的代码我不这样做,所以我不太确定,如果它真的有必要。关于我的环境的一些信息:XAMPP适用于Linux 5.6.8/Ubuntu 14我使用Codeigniter框架3.0.2和PHP版本5.6.8。是的,我检查了php.ini文件,我找不到任何会话。Start_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');
     }
    }

事情是,它工作得很好,因为如果我不登录,我无法访问具有该验证方法的页面。所以,我从来没用过session_start()。我应该吗?在哪里?

Thanks in advance

我应该吗?

。你不必使用session_start()


为什么?

Codeigniter使用set_userdata方法设置Session

In Codeigniter.com

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


有什么额外的事情要做吗??

是的。你必须在autoload.php

中加载Session库

如何使用set_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";
}

有额外的资源吗??

    <
  1. 会话库/gh>

在codeigniter中不需要使用session_start()。只需在配置文件夹

中的autolload .php文件中自动加载会话库
$autoload['libraries'] = array('session');

更多内容请阅读本教程

http://w3code.in/2015/10/session-handling-in-codeigniter/

或者您可以使用本机会话为本机会话读取此

http://w3code.in/2015/10/how-to-use-native-php-session-in-codeigniter/

在codeigniter中,不需要使用session_start()

直接用

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

$this->session->userdata();// to retreive the session values.

似乎会话正在使用缓存,你可以var转储sessionid @页面的顶部,并确保它返回空。此外,我会尝试在浏览器的隐身模式,以消除缓存

的模糊性
var_dump (session_id())