nodejs と nowjs を codeigniter フレームワークに統合しようとしています。サイト全体を書き直す時間がないので、ユーザーがログインしているかどうかを確認したいと思います。ion_auth を使用しており、セッションを db に保存しています。
クライアント 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 からセッション 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);
}
}
それは機能しており、データベースのセッションからコンソールにuser_dataを記録でき、everyone.now.receiveMessage関数を適切に呼び出します。
これに関して 3 つの質問があります。
1) sc_sessions db テーブルに、session_id を持つ行が挿入されていますが、user_data、user_agent、および ip 0.0.0.0 は空です。フォームが送信されるたびに 1 行。
何が原因で、どうすれば修正できますか?
ajaxcalls と codeigniter セッションに問題があることはわかっています。このスレッドを参照してください:
リクエストが WebSocket で行われたかどうかを確認する方法はありますか?
2) ユーザーがログインしているかどうかを確認する最良の方法は何ですか? たとえば、クエリが何かを返したかどうかを確認する if ステートメント、またはより良い方法があるかどうかを確認します。
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();
}
}