.Net 用户重复发送请求的问题
脑洞大开,如果一个退款请求,用户由于网络疯狂点击按钮咋办?或者流氓疯狂轰炸你的服务器咋整?
首先想到的是定义变量来解决这个问题,但是兄弟们,网站上面这么多接口咋整?一个一个的定义变量吗??显然不是最佳方案,也不够优雅
解决方法
我们的解决思路是 使用MemoryCache 缓存对象将用户的请求地址和sessionid当做缓存对象的key并设置过期时间,然后通过在这个缓存对象里面找key值来判断是否是重复点击
首先封装了个缓存的帮助类
public class CacheHelper
{
public static void Set(string key, object obj, int seconds = 10)
{
var cache = MemoryCache.Default;
var policy = new CacheItemPolicy
{
AbsoluteExpiration = DateTime.Now.AddSeconds(seconds)
};
cache.Set(key, obj, policy);
}
public static T Get<T>(string key) where T : class
{
var cache = MemoryCache.Default;
try
{
return (T)cache[key];
}
catch (Exception)
{
return null;
}
}
}
实现代码
public void Controller()
{
string url = "第n次的请求地址"+"sessionid";
string guid = CacheHelper.Get<string>(url);
if (guid != null)
{
Console.WriteLine("重复访问");
}
else
{
CacheHelper.Set(url, new Guid().ToString() + DateTime.Now.Ticks);
}
}
是不是很简单?另外也可以使用redis来代替这个缓存对象,思路都是一样的哈
本文探讨了如何处理用户因网络问题或恶意攻击导致的重复请求问题。提出了一种解决方案,即使用MemoryCache或Redis作为缓存对象,通过存储用户的请求地址和sessionid来判断请求是否重复。当接收到请求时,首先检查缓存中是否存在相同的key,如果存在则视为重复访问,否则将新的请求信息存入缓存并设置过期时间。这种方法简单且有效,能保护服务器免受重复或恶意请求的影响。

1411

被折叠的 条评论
为什么被折叠?



