2011-12-03 41 views
3

我想集成nodejs和nowjs與codeigniter框架,因爲我沒有時間來重寫整個站點我想檢查用戶是否登錄。我正在使用ion_auth,我存儲會話分貝。codeigniter nodejs和nowjs集成

客戶JS:

var session_id = $.cookie('sc_session'); 

$("form").submit(function() { 
    now.distributeMessage($("textarea").val(),session_id); 
}); 

now.receiveMessage = function(message){ 
    $("body").append("<br>" + message); 
}; 

繼承人的的NodeJS服務器代碼:

編輯:* 簡化了一點,並得到客戶的js *

會話cookie
everyone.now.distributeMessage = function(message,session_cookie) { 
    exec('php index.php user_session decrypt ' + encodeURIComponent(session_cookie), 
    function (error, stdout, stderr) { 
     var parts = stdout.split(';'); 
     var session_id = parts[1].split(':')[2]; 
     var query = 'select * from sc_sessions where session_id=' + session_id; 
     client.query(query, function (err, results, fields) { 
      if (results) { 
       everyone.now.receiveMessage(str); 
      } 
     }); 
    }); 
}; 

這裏是叫的NodeJS控制器:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); 

class User_session extends CI_Controller 
{ 
    public function __construct() 
    { 
    parent::__construct(); 
    if (!$this->input->is_cli_request()) { 
     redirect('index'); 
    } 
    } 

    public function decrypt($session_id) 
    { 
    $this->load->library('encrypt'); 
    $session_id = urldecode($session_id); 
    echo $this->encrypt->decode($session_id); 
    } 
} 

這是工作,我可以登錄中的用戶數據從數據庫中的會議控制檯,並適當調用everyone.now.receiveMessage功能。

我有這方面的三個問題:

1)有插入sc_sessions db表有session_id的,但空USER_DATA,USER_AGENT和ip 0.0.0.0行。每次提交表單時一行。

這是什麼原因造成的?我該如何解決?

我知道ajaxcalls和codeigniter會話有問題。看到這個線程:

有沒有辦法看看請求是否與websockets?

2)檢查用戶是否登錄的最佳方法是什麼?例如,如果您檢查查詢返回任何內容或有更好方法的語句?

3)有沒有更好的方法來做到這一點?

任何幫助讚賞,因爲我堅持這一點。

喬治

編輯: 從調用命令行腳本導致它創建一個新的會話。通過擴展會話類來防止它。

應用程序/庫/ MY_Session.php

<?php 
class MY_Session extends CI_Session { 

    public function __construct() 
    { 
     $CI = get_instance(); 

     if ($CI->input->is_cli_request()) 
     { 
      return; 
     } 

     parent::__construct(); 
    } 
} 
+0

在CI論壇上詢問這可能是一個更好的主意。在那裏得到更好的答案的機會要好十倍。 – Steven

+0

好的!我會盡力感謝 – georgesamper

+1

@Steven,不需要將George返回到CI論壇,因此非常適合CI/PHP /等問題! – Jakub

回答

2

大的問題,但大量的開銷,以測試一個答案。

我最好的猜測是CLI不會傳遞像user_agent和ip這樣的環境變量。這些由apache處理,並且與CLI請求本身無關。如果你知道它在節點環境中是安全的,我會單獨通過session_id。

+0

感謝您的回覆。我用少量的代碼更新了這個問題。它仍然在會話表中插入一行。無法擺脫這個問題!否則,它的工作原理應該如此。 – georgesamper

+0

您的控制器是否仍然爲CLI請求加載會話類?我想你必須明白自動加載,因爲CI可能不會自動禁用它... – landons

+0

有沒有什麼辦法可以讓ci在CLI下運行控制器時不創建會話cookie?也許通過擴展會話類。問題是它在哪裏設置? – georgesamper