我正在尝试将 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服务器代码:
编辑:*稍微简化一下,并从客户端 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 函数。
我对此有三个问题:
1) 在 sc_sessions db 表中插入了一些行,其 session_id 为空,但 user_data、user_agent 和 ip 为 0.0.0.0。每次提交表单时一行。
是什么原因造成的,我该如何解决?
我知道 ajaxcalls 和 codeigniter 会话存在问题。看到这个线程:
有没有办法查看请求是否是使用 websockets 发出的?
2)检查用户是否登录的最佳方法是什么?例如 if 语句,您可以在其中检查查询是否返回任何内容或是否有更好的方法?
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();
}
}