【发布时间】:2012-01-11 23:21:22
【问题描述】:
我正在尝试将 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。每次提交表单时一行。
这是什么原因造成的,我该如何解决?
我知道 ajaxcall 和 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();
}
}
【问题讨论】:
-
在 CI 论坛上询问可能是一个更好的主意。在那里获得更好答案的机会要高十倍。
-
好的!我会试试谢谢
-
@Steven,无需将 George BACK 引导至 CI 论坛,对于 CI / PHP / 等问题非常有用!
标签: php mysql codeigniter node.js nowjs-sockets