开发者

nodejs read session from database

Im writing an application using nodejs, nowjs, codeigniter and mysql. Im using database to store the session. Is there a good way to check and retrieve the session cookie in nodejs? So if that for example, i need to check if a user owns a specific row in the database that is about to get deleted, using nowjs. e.g:

server:

//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;
            }
        );
    }
}

client:

开发者_JS百科
//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();
    });
};


Session ids are typically preserved in client cookies which are surfaced in httpServer handlers as request.headers.cookie.

You'd need to know the name of the cookie containing the session id and then:

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 ''


Your client code is messy

// 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;
});

Try this instead

$("#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();
}

Also .hasClass is better

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜