public class FrequencyControler {
/// <summary>
/// 訪問控制器名稱,用於區分其它控制器,支援多個控制器
/// </summary>
private string Name { get; set; }
/// 限定時長
private int Seconds { get; set; }
/// 限定次數
private int Times { get; set; }
public readonly int MAX_TIMES = 100;
#region 私有方法
private string SessionNameDatelist {
get { return String.Format("fc.{0}.datelist", Name); }
}
private string SessionNameDatepos {
get { return String.Format("fc.{0}.datepos", Name); }
/// 取得用於儲存每次訪問時間點的陣列(做佇列用)
/// <returns></returns>
private long[] GetDateList() {
if (HttpContext.Current.Session[SessionNameDatelist] == null) {
HttpContext.Current.Session[SessionNameDatelist] = new long[MAX_TIMES];
return (long[])HttpContext.Current.Session[SessionNameDatelist];
/// 獲取時間記錄位置,相當於當前佇列位置
private int GetDatepos() {
if (HttpContext.Current.Session[SessionNameDatepos] == null) {
HttpContext.Current.Session[SessionNameDatepos] = 0;
return (int)HttpContext.Current.Session[SessionNameDatepos];
/// 設定時間記錄位置,相當於當前佇列位置
/// <param name="pos"></param>
private void SetDatepos(int pos) {
HttpContext.Current.Session[SessionNameDatepos] = pos;
#endregion
/// 構造訪問檢測器,限定指定時間內最多請求次數
/// <param name="name">名稱</param>
/// <param name="seconds">限定時間範圍(秒數)</param>
/// <param name="times">限定次數</param>
public FrequencyControler(string name, int seconds, int times) {
Name = name;
Seconds = seconds;
Times = times;
if (times > MAX_TIMES) throw new Exception("限定次數設定值超出上限!");
/// 記錄一次訪問,在時間點陣列的下一個位置(按最大長度迴圈覆蓋儲存)
pub
public class FrequencyControler {
/// <summary>
/// 訪問控制器名稱,用於區分其它控制器,支援多個控制器
/// </summary>
private string Name { get; set; }
/// <summary>
/// 限定時長
/// </summary>
private int Seconds { get; set; }
/// <summary>
/// 限定次數
/// </summary>
private int Times { get; set; }
public readonly int MAX_TIMES = 100;
#region 私有方法
private string SessionNameDatelist {
get { return String.Format("fc.{0}.datelist", Name); }
}
private string SessionNameDatepos {
get { return String.Format("fc.{0}.datepos", Name); }
}
/// <summary>
/// 取得用於儲存每次訪問時間點的陣列(做佇列用)
/// </summary>
/// <returns></returns>
private long[] GetDateList() {
if (HttpContext.Current.Session[SessionNameDatelist] == null) {
HttpContext.Current.Session[SessionNameDatelist] = new long[MAX_TIMES];
}
return (long[])HttpContext.Current.Session[SessionNameDatelist];
}
/// <summary>
/// 獲取時間記錄位置,相當於當前佇列位置
/// </summary>
/// <returns></returns>
private int GetDatepos() {
if (HttpContext.Current.Session[SessionNameDatepos] == null) {
HttpContext.Current.Session[SessionNameDatepos] = 0;
}
return (int)HttpContext.Current.Session[SessionNameDatepos];
}
/// <summary>
/// 設定時間記錄位置,相當於當前佇列位置
/// </summary>
/// <param name="pos"></param>
private void SetDatepos(int pos) {
HttpContext.Current.Session[SessionNameDatepos] = pos;
}
#endregion
/// <summary>
/// 構造訪問檢測器,限定指定時間內最多請求次數
/// </summary>
/// <param name="name">名稱</param>
/// <param name="seconds">限定時間範圍(秒數)</param>
/// <param name="times">限定次數</param>
public FrequencyControler(string name, int seconds, int times) {
Name = name;
Seconds = seconds;
Times = times;
if (times > MAX_TIMES) throw new Exception("限定次數設定值超出上限!");
}
/// <summary>
/// 記錄一次訪問,在時間點陣列的下一個位置(按最大長度迴圈覆蓋儲存)
/// </summary>
pub