我已经使用完整的javascript完成了这个,但我怎么能在C#/ asp.net网站(不是winform)中这样做。感谢..
答案 0 :(得分:4)
所以你的意思是用户在查看来源时不应该发现你的超级秘密konami代码?
不可能完全在服务器端完成,除非你想要在每次击键时回发,这很尴尬。
你可以压缩和混淆javascript,但我猜一个有坚定决心的用户仍然可以解决这个问题。
您可以使用Silverlight,但同样,具有强烈决心的用户可以从浏览器缓存中解压缩XAP并在反射器中查看您的DLL。
你可以做的是使用AJAX将每次击键发送到服务器(或者可以在客户端收集它们并批量发送),这实际上并非 非常慢。在服务器上,您必须分析击键。该代码对用户不可见。然后,您必须模拟一些推送机制,以在客户端触发您想要的反应。
答案 1 :(得分:3)
在C#中进行它是没有意义的。这样的代码无论如何都必须在客户端执行,所以它必须是Javascript(除非你想将每个客户端击键发送到服务器,这将非常缓慢)
无论如何,这是一个C#实现。它适用于WPF,但要使其适应其他技术并不困难。
private static readonly Key[] _konamiCode = new[] { Key.Up, Key.Up, Key.Down, Key.Down, Key.Left, Key.Right, Key.Left, Key.Right, Key.B, Key.A };
int _konamiCurrentIndex = 0;
protected override void OnPreviewKeyDown(KeyEventArgs e)
{
base.OnPreviewKeyDown(e);
if (e.Key == _konamiCode[_konamiCurrentIndex])
{
_konamiCurrentIndex++;
if (_konamiCurrentIndex == _konamiCode.Length)
{
_konamiCurrentIndex = 0;
KonamiEasterEgg();
}
}
else
{
_konamiCurrentIndex = 0;
}
}
void KonamiEasterEgg()
{
// whatever you want to do when the Konami code is entered...
}
答案 2 :(得分:0)
正如其他人已经说过的那样,在C#中实现完全没有多大意义。但我可以想象JavaScript + AJAX与C#的某种组合......只是一些想法:)
可能的工作流程:使用JavaScript扫描用户输入(最后10个键)并将输入推送到数组(ascii代码或其他内容)并通过AJAX发送请求,这将返回整个秘密目标页面作为html结果而不仅仅是检查,因为这很容易破解。实际上,这更像是密码比较。但你可以优化你的JavaScript并在没有输入(空闲时间)的情况下在几秒钟内清除数组(例如输入必须流畅)并在1秒后发送ajax请求而不输入,这样你就不会淹没自己的服务器
JQuery会帮助你很多!
快乐编码:)
答案 3 :(得分:0)
见herzmeister der welten
你可以做的是使用AJAX将每次击键发送到服务器(或者可以在客户端收集它们并批量发送),这实际上并不那么痛苦。在服务器上,您必须分析击键。该代码对用户不可见。然后,您必须模拟一些推送机制,以在客户端触发您想要的反应。
触发器可能是组合中所需的最后一次击键,用户只能解密最后一次击键,这样可以提供最少的回发,而无需进行客户端验证。
(本来只是发表评论但缺乏代表)