2012-04-18 73 views
0

我使用CodeIgniter框架的原生PHP會話($ _SESSION)。CodeIgniter會話變量不通過

我有一個「登錄」控制器加載視圖,其中用戶輸入登錄名和密碼。 用戶提交登錄表單後,將調用「Login」控制器的authenticate()方法。 如果一切都好,我將一些數據添加到$ _SESSION數組,然後我將用戶重定向到「組織」控制器myOrganisation()方法。 我在login/login(),Login/authenticate()和Organization/myOrganisation()方法中調用session_start(),但仍未傳遞會話,因爲在myOrganisation()方法中會話是新的。

我測試了我的cookie功能,創建了2個測試php頁面,其中我只是回顯會話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'])) { 
+0

是否BASE_URL()返回與您登錄的地點相同的域名?否則您的會話將重新啓動。 – Leven 2012-04-18 21:58:15

+0

出於好奇,是不是有沒有使用會話庫中內置的CodeIgniter的原因?此外,這可能只是您在此輸入的產品,但您尚未關閉第一個功能。當你開始authenticate()時,index()仍然是打開的。在src中爲 – 2012-04-18 22:09:49

+0

,index()被關閉。我沒有使用CI會話,因爲我遇到了一些問題,試圖配置並使其工作。花了4個小時,他們從來沒有工作,所以我決定切換到本地seeions – 2012-04-19 09:15:57

回答

0

我不知道什麼是錯的在session_start(),我沒有展示位置,但有一件事解決的問題是將其放置在index.php文件在主文件夾

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的有效期很長一段時間,並在你的域。除了(而不是關閉索引()和authenticate()方法),其中的$ login來自哪裏?

+0

我只是省略了大部分代碼,這並不重要 – 2012-04-21 20:26:06