codeigniter nodejs 和 nowjs 集成
Posted
技术标签:
【中文标题】codeigniter nodejs 和 nowjs 集成【英文标题】:codeigniter nodejs and nowjs integration 【发布时间】: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 / 等问题非常有用! 【参考方案1】:很好的问题,但测试答案的开销很大。
我最好的猜测是 CLI 不会传递 user_agent 和 ip 等环境变量。这些由 apache 处理,与 CLI 请求本身无关。如果你知道它在节点环境中是安全的,我会单独使用 session_id。
【讨论】:
感谢您的回复。我用更少的代码更新了这个问题。它仍然在会话表中插入一行。解决不了这个问题!!否则它会正常工作。 您的控制器是否仍为 CLI 请求加载会话类?我认为您必须对自动加载有所了解,因为 CI 可能不会自动禁用它... 当控制器从 CLI 运行时,有什么方法可以让 ci 不创建会话 cookie?也许通过扩展会话类。问题是它在哪里设置? 它通过扩展 Session 类来工作,就像在这个答案中一样:***.com/questions/8394225/…以上是关于codeigniter nodejs 和 nowjs 集成的主要内容,如果未能解决你的问题,请参考以下文章