我正在使用nodejs,nowjs,codeigniter和mysql编写应用程序。我使用数据库来存储会话。有没有一种在nodejs中检查和检索会话cookie的好方法?因此,如果这样,我需要使用nowjs检查用户是否拥有将要删除的数据库中的特定行。 e.g:
服务器:
//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();
});
};
答案 0 :(得分:3)
会话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 ''
答案 1 :(得分:1)
您的客户端代码很乱
// 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();
});
};