CodeIgniter会话变量未传递

时间:2012-04-18 21:37:00

标签: php codeigniter session cookies

我在CodeIgniter框架中使用本机PHP会话($ _SESSION)。

我有一个“登录”控制器加载视图,用户输入登录名和密码。 用户提交登录表单后,将调用“Login”控制器authenticate()方法。 如果一切正常,我将一些数据添加到$ _SESSION数组,然后我将用户重定向到“组织”控制器myOrganisation()方法。 我在Login / login(),Login / authenticate()和Organization / myOrganisation()方法中调用session_start(),但仍未传递会话,因为在myOrganisation()方法中会话是新的。

我通过创建2个测试php页面来测试我的cookie功能,其中我只是回显会话ID。它完美地运作。 也许我没有把session_start()放在它需要的所有地方? (我将它们放在所有控制器方法中)。

登录控制器:

class Login extends CI_Controller {
public function index() {
        session_start();
        $this->load->view("Login/index", $data);

    public function authenticate() {
                    session_start();
                    $_SESSION['login'] = $login; //  everything is alright, redirect
        header("location: ".base_url()."Organisations/MyOrganisation");

组织控制员:

public function MyOrganisation() {
    session_start(); // here session is a new one, not passed
    if(isset($_SESSION['login'])) {

2 个答案:

答案 0 :(得分:0)

session_start()也可以在构造函数中指定,而不是在类中的每个方法中指定。这意味着你的控制器都可以拥有:

function __construct () {
    ini_set("session.gc_maxlifetime", 14400);
    ini_set("session.cookie_domain", .yourdomain.com);
    session_set_cookie_params(14400, '/', .yourdomain.com);
    session_start();
}

构造函数中的前3行是为了确保会话cookie长时间在你的域下有效。

除了那个(而不是关闭的index()和authenticate()方法),$ login来自哪里?

答案 1 :(得分:0)

我不知道我所做的session_start()展示位置有什么问题,但解决问题的一件事就是将它放在主文件夹的index.php中