如何管理Asp.net网页游戏的状态

时间:2010-11-03 16:02:45

标签: asp.net cookies

说我需要开发一个在线奶酪游戏,游戏就在电脑和真正的人类玩家之间。

即使在用户关闭浏览器或服务器temp在短时间内脱机之后,req仍然可以保持状态(如步骤,获胜历史记录)。因此,当玩家回到游戏页面时,他应该继续玩他上次玩的游戏,并获得他的游戏历史。

确实需要cookie才能实现这一切,但我对使用它的安全性感到担忧。我应该防止人们直接破解cookie以改变历史或某事。我的想法是让服务器端为客户端分配一个令牌。所有步骤和历史数据都与此标记字符串相关联,并存储在持久层(数据库)中。因此,用户不知道改变DB中的数据。

是否过度设计,或者有一种加密cookie的方法。

如果我错了,请纠正我。

3 个答案:

答案 0 :(得分:2)

正如您所提到的,您有两个选择:

1)加密游戏的当前状态并将其放入Cookie

这绝对可以使客户端无法通过加密来修改状态。但是,您需要将游戏状态的纯文本版本发送给客户端。当客户端发送回移动时,您将解密cookie以获取最后一个状态,验证其移动并修改状态。冲洗并重复。

这样做的缺点是流量增加以及实施解密/加密的需要。

2)将游戏状态存储在服务器上并使用cookie作为用户标识符(或登录系统)

这可能是最好的解决方案,因为它可以让您正确构建数据并减少用户的流量。您只需将游戏的当前状态发送给客户端即可。然后客户发回他们的举动。当您收到他们的移动时,您从存储加载游戏,验证客户端是否为有效模式,然后调整状态。

缺点是您需要将状态保持在一段时间,无论是在数据库还是缓存中(Velocity?)。也可以考虑使用NoSQL解决方案。

答案 1 :(得分:0)

这就是我要做的。

  1. 完成所有游戏逻辑 客户端。在您的服务器上运行对手AI会非常昂贵。

  2. 使用保存状态 window.localStorage(也许有一个 使用ajax为旧的后备 浏览器)

  3. 向您的服务器发送步骤以验证移动,记录胜利等。

  4. 这不是唯一的方式,可能不适合您的情况。

答案 2 :(得分:0)

为什么不加密cookie数据?您可以使用这些扩展方法向字符串类添加简单的加密/解密方法: http://www.extensionmethod.net/Details.aspx?ID=69