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

时间:2015-10-19 04:23:39

标签: php codeigniter session

所以问题是,在设置任何值时,PHP中的会话是否可能是自动启动的,因为我读到你需要调用session_start()并且在我当前的代码中我需要#39} ;我没有在任何地方这样做,所以我不确定它是否真的有必要。 有关我的环境的一些信息: XAMPP for Linux 5.6.8 / Ubuntu 14 我使用的是Codeigniter Framework 3.0.2和PHP 5.6.8版。 是的,我检查了php.ini文件,我找不到任何session.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');
            }

然后在每个页面中我调用一个帮助方法,检查用户是否以这种方式进行身份验证:

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()。我是不是该?在哪里?

提前致谢

4 个答案:

答案 0 :(得分:0)

在codeigniter中,您不需要使用session_start()。只需在config文件夹

中的autoload.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/

答案 1 :(得分:0)

我应该吗?

没有。您不必使用session_start()

<强>为什么吗

Codeigniter使用set_userdata方法设置Session。

Codeigniter.com

  

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

还有其他事情要做吗?

是。您必须在autoload.php

中加载会话库

如何使用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. Session Library

答案 2 :(得分:0)

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

var_dump (session_id())

答案 3 :(得分:0)

在codeigniter中,无需使用session_start()

只需使用

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

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

请查看here了解详情。