хранить и получать значения файлов cookie в C # - PullRequest
1 голос
/ 06 сентября 2011

У меня есть приложение игрового автомата, которое отображает флэш-файл, используя c #. Любой пользователь заходит на сайт и играет в игру. Но мне нужно было бы ограничить это максимум 3 раза в день, то есть он мог играть в игру только 3 раза, а если он пойдет играть в четвертый раз, то он получит сообщение о том, что может играть на следующий день. Поскольку на этом сайте нет логина пользователя, я решил сохранить значения cookie. Это будет счетчик, который будет увеличиваться каждый раз, когда он попадает на сайт. Затем в каждом событии page_load извлекайте значение cookie и, если оно равно 3, выводите сообщение «Нет воспроизведения».

Сначала я получу значение cookie при событии загрузки страницы.

string _counter = response.Cookies["slotmachinecookie"]["counter"];
    if (!IsPostBack)
    {
    if (_counter) = 3
       //displayMessage
       return;
    else
    {
       HttpCookie cookie = new HttpCookie("slotmachinecookie");
       if (string.IsNullOrEmpty(_counter))
         cookie.Values.Add("1", "counter");
       else if (_counter == "1")
         cookie.Values.Add("2", "counter")
       else if (_counter == "2")
         cookie.Values.Add("3", "counter");
    }
}

Будет ли это работать? Я думаю, я мог бы попробовать это, но просто хочу убедиться, что есть лучший способ сделать это, кроме куки? Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 06 сентября 2011

Исходя из моего комментария, ваш подход будет работать, но опытный пользователь может перехитрить ваше ограничение использования, очистив куки и продолжая играть весь день.

Хотя подход с куки прост, у него есть дырав нем.

То, что вы можете рассмотреть, - это захват входящего IP-адреса пользователя и его сохранение в базе данных, локальном кэше (в зависимости от архитектуры вашего приложения) или в каком-либо другом хранилище.

Вы можете захватить входящий IP-адрес, используя переменную запроса сервера REMOTE_ADDR.

Request.ServerVariables["REMOTE_ADDR"]

Опять же, в зависимости от того, как размещено ваше приложение, ваш провайдер может сообщить об этом неправильно (например, если вашСервер находится за балансировщиком нагрузки, который может быть IP-адресом балансировщика нагрузки).Вы также можете проверить, передает ли ваш провайдер эту информацию, используя заголовок «X_FORWARDED_FOR».(Некоторые устройства используют разные варианты имени этого заголовка ... проверьте вашу документацию.)

Так что это будет немного сложнее, но также сможет закрыть эту дыру немного больше, чтобы ограничить использованиетолько 3 раза в день.

Надеюсь, это поможет.Удачи!

0 голосов
/ 06 сентября 2011

Я не видел, где вы проверяете дату и сбрасываете счет на ноль, если это новый день.

И это за день или за 24 часа?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...