繁体   English   中英

nodejs从数据库读取会话

[英]nodejs read session from database

我使用nodejs,nowjs,codeigniter和mysql编写应用程序。 我正在使用数据库来存储会话。 有没有一种好的方法来检查和检索nodejs中的会话cookie? 因此,例如,如果要这样做,我需要使用nowjs检查用户是否拥有将要删除的数据库中的特定行。 例如:

服务器:

//some code here to get session cookie and retrieve stored data from database

var session = { user_id: //userid from database }

everyone.now.deleteGuestbook = function(recordId) {
    var owner_id = client.query(
        'SELECT owner_id FROM guestbook WHERE id = ?',
        [recordId]
    );
    if (session.user_id === owner_id) {
        client.query(
        'DELETE FROM guestbook WHERE id = ?',
        [recordId], function() {
                 everyone.now.deleteRecord;
            }
        );
    }
}

客户:

//Delete guestbook record
$('#guestbook_records li').live('click', function(e) {
    if ($(e.target).is('a.delete')) {
        var id = $(this).find('a.delete').attr('href');
        dialogBox('warning', 'Are you sure you want to delete the record?',
            function() {
                now.deleteGuestbook(id);
            });
    }
    else {
        return;
    }
    return false;
});

now.deleteMessage = function(id) {
    $('li[class="' + id + '"]').slideUp(400, function() {
        $(this).remove();
    });
};

会话ID通常保存在客户端Cookie中,该客户端Cookie在httpServer处理程序中以request.headers.cookie的形式出现。

您需要知道包含会话ID的cookie的名称,然后:

var cookies=(function(str){                     # create hash from cookie string
      var result={};
      str.split(/;\s+/).forEach(function(e){
        var parts=e.split(/=/,2);
        result[parts[0]]=parts[1]||'';
      });
      return result;
    })(request.headers.cookie),
    sessionCookieName='session',                # name of cookie holding session id
    sessionId=cookies[sessionCookieName]||'';   # session id or ''

您的客户代码凌乱

// live is bad and inefficient
$('#guestbook_records li').live('click', function(e) {
    // this kind of check seems horrid
    if ($(e.target).is('a.delete')) {
        // not very optimum to find it. 
        var id = $(this).find('a.delete').attr('href');
        dialogBox('warning', 'Are you sure you want to delete the record?',
            function() {
                now.deleteGuestbook(id);
            });
    }
    else {
        // why return here?
        return;
    }
    // return false should be in if block.
    return false;
});

试试这个

$("#guestbook_records li a.delete").click(function(e) {
    var id = this.href;
    dialogBox("warning", "Are you sure you want to delete the record?",
        function() {
             now.deleteGuesBook(id);
        });
    e.preventDefault();
}

而且.hasClass更好

now.deleteMessage = function(id) {
    $('li').hasClass(id).slideUp(400, function() {
        $(this).remove();
    });
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM