我应该让NHibernate为创建的实体生成GUID,还是生成GUID客户端安全?

时间:2012-12-15 21:18:30

标签: javascript guid

我正在尝试提高应用的响应能力。用户表示他们想要将Song对象添加到播放列表。为此,我创建一个新的Song对象,将其保存到我的服务器以设置其ID,然后,当服务器成功响应时,我将Song对象添加到播放列表。

这会产生副作用,即在用户操作和应用响应之间给用户带来尴尬的延迟。

我想知道是否可以为我的实体客户端生成GUID,而不是将具有空GUID的对象传递给NHibernate(然后在使用我的Sql Server DB时设置它。)

我会使用this method to generate a GUID

'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
    var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
    return v.toString(16);
});
但是,我担心会有碰撞。我可以做?或者客户端和服务器端生成的GUID大致相同?

2 个答案:

答案 0 :(得分:1)

在客户端生成ID时,您无法保证唯一ID,因为客户端javascript代码可以由精通用户修改(或者可以修改发送到服务器的请求)。因此,您应该在服务器端生成GUID以进行保存。

答案 1 :(得分:0)

您提到的生成GUID的方法绝对不安全,迟早会导致冲突。你肯定应该在服务器端生成GUID。

您有什么理由创建新的Song对象吗? 您是在复制现有对象还是创建全新对象? 如果它是副本,您应该考虑将原始文件链接到播放列表(您不必等待GUID)。