私はcodeigniterフレームワークでnodejsとnowjsを統合しようとしています。サイト全体を書き直す時間がないので、ユーザーがログインしているかどうかをチェックしたいと思います。私はion_authを使用しています。データベース内のセッション。codeigniter nodejsとnowjs integration
クライアント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サーバコード:
EDIT:* それは少し簡素化、およびクライアントJS *
からセッションクッキーを取得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);
}
});
});
};
それが働いていると私は、データベースにセッションからコンソールへのuser_dataをログに記録することができ、それが適切にeveryone.now.receiveMessage関数を呼び出す
<?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);
}
}
:
そして、ここではnodejsによって呼び出さコントローラです。
私はこれについて、3つの質問を持っている:
1)のsession_idではなく、空のuser_data、user_agentのとIP 0.0.0.0でsc_sessionsのDBテーブルに挿入された行があります。フォームが送信されるたびに1行。
これを引き起こしている原因は何ですか。どのように修正できますか?
私はajaxcallsとcodeigniterセッションに問題があることを知っています。このスレッドを参照してください:
要求がWebソケットで行われたかどうかを確認する方法はありますか?
2)ユーザーがログインしているかどうかを確認する最善の方法は何ですか?たとえば、クエリで何かが返されたかどうかを確認するステートメント、またはより良いメソッドがある場合は?
3)これを行うより良い方法はありますか?
私はこれに固執しているように助けていただきありがとうございます。
ジョージ
EDIT: コマンドラインからスクリプトを呼び出すには、それが新しいセッションを作成していました。セッションクラスを拡張することでそれを防ぐ。
アプリケーション/ライブラリ/ 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();
}
}
CIフォーラムで質問することをお勧めします。そこではより良い答えを得るには、10倍の可能性があります。 – Steven
私はそれを試してみます – georgesamper
@スティーブンは、CIフォーラムにジョージBACKを指示する必要はありませんので、非常にCI/PHP/etcの質問に良いです! – Jakub