Php CodeIgniter会话变量未传递

Php CodeIgniter会话变量未传递,php,codeigniter,session,cookies,Php,Codeigniter,Session,Cookies,我正在使用带有CodeIgniter框架的本机PHP会话($\u会话) 我有一个“登录”控制器加载视图,用户在其中输入登录名和密码。 用户提交登录表单后,将调用“login”controllers authenticate()方法。 若一切正常,我将一些数据添加到$\u会话数组,然后将用户重定向到“Organization”控制器MyOrganization()方法。 我在Login/Login()、Login/authenticate()和organization/myorganization

我正在使用带有CodeIgniter框架的本机PHP会话($\u会话)

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

我通过创建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'])) {
组织总监:

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'])) {
会话_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从哪里来?

我不知道我做的session\u start()放置有什么问题,但解决问题的一件事是将它放在主文件夹的index.php中

base\u url()返回的域是否与您登录的域相同?否则您的会话将重新启动。出于好奇,您是否有理由不使用CodeIgniter内置会话库?此外,这可能只是您在此处键入它的结果,但您尚未关闭第一个函数。启动authenticate()时,index()仍处于打开状态。在src中,index()处于关闭状态。我没有使用CI会话,因为我遇到了一些问题,正在尝试配置并使其正常工作。花了大约4个小时,但它们从未工作过,所以我决定切换到本机seesionsi只是省略了大部分代码,这并不重要