• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Чудеса сервера Domino 6.0

  • Автор темы Don_VinNi
  • Дата начала
D

Don_VinNi

Лотусоиды скажите пожалуста что могло привести к ледующему действию:

Существует документ(Response) у нее есть поле которое хранит номер и генерируется авто. т.е при создание следующего дока генерируется следующий число. Проблема такова:

1. Алексей
2. Вова
2. Леонид
4. Карл

код учитовал что Леонид должен был быть 3, а получилось 2. И то что странно Карл стал 4 а не 3 т.е должен был быть такой результат:

1. Алексей
2. Вова
3. Леонид
4. Карл

Ну и укого какие мысли есть на счет этого
 
M

morpheus

Трава?! Где Вы брали траву????

чесно нифига не понятно

<!--QuoteBegin-Don_VinNi+20:06:2007, 10:47 -->
<span class="vbquote">(Don_VinNi @ 20:06:2007, 10:47 )</span><!--QuoteEBegin-->код учитовал что
[snapback]70009" rel="nofollow" target="_blank[/snapback]​
[/quote]

Какой код КАК учитыва, где учитыва ???
 
K

K-Fire

<!--QuoteBegin-Don_VinNi+20:06:2007, 09:47 -->
<span class="vbquote">(Don_VinNi @ 20:06:2007, 09:47 )</span><!--QuoteEBegin-->Существует документ(Response) у нее есть поле которое хранит номер и генерируется авто
[snapback]70009" rel="nofollow" target="_blank[/snapback]​
[/quote]

Проблема зарылась в коде генерации номера.
Например может быть такой алгоритм:
Есть профиль который хранит текущий номер последовательности.
2 пользователя одновременно берут оттуда номер при создании документа, и прибавляют в нем 1 когда документ сохраняется. Тогда получается что у обоих будет 2 и 2, и следущий номер будет 4.

В любом случае, генерировать строго возрастающую последовательность номеров без дырок нереально имхо.
 
30.05.2006
1 345
12
BIT
0
Проблема зарылась в коде генерации номера.
Например может быть такой алгоритм:
Есть профиль который хранит текущий номер последовательности.
...
Профиль - в смысле profile? Детская болезнь, гарантированно будет работать неправильно. Профайл КЕШИРУЕТСЯ на каждом клиенте -> т.о. все будут генерить одни и те же номера
 
D

Don_VinNi

Профиль - в смысле profile? Детская болезнь, гарантированно будет работать неправильно. Профайл КЕШИРУЕТСЯ на каждом клиенте -> т.о. все будут генерить одни и те же номера

генерация происходит в следующем порядке:

ds:=@Elements(@DbLookup("":"NoCache";"";"Student";ID;1;[FailSilent]))+1;
@If(@IsNewDoc;ds;"")

в данном коде как я понимаю выключаю кеширование, не так ли?
 
K

K-Fire

<!--QuoteBegin-Constantin A Chervonenko+20:06:2007, 22:06 -->
<span class="vbquote">(Constantin A Chervonenko @ 20:06:2007, 22:06 )</span><!--QuoteEBegin-->Профиль - в смысле profile? Детская болезнь, гарантированно будет работать неправильно. Профайл КЕШИРУЕТСЯ на каждом клиенте -> т.о. все будут генерить одни и те же номера
[snapback]70067" rel="nofollow" target="_blank[/snapback]​
[/quote]

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

<!--QuoteBegin-Don_VinNi+21:06:2007, 06:24 -->
<span class="vbquote">(Don_VinNi @ 21:06:2007, 06:24 )</span><!--QuoteEBegin-->ds:=@Elements(@DbLookup("":"NoCache";"";"Student";ID;1;[FailSilent]))+1;
@If(@IsNewDoc;ds;"")
[snapback]70077" rel="nofollow" target="_blank[/snapback]​
[/quote]

Этот код в вычисляемом поле находится, я правильно понял? Значит значение берется когда документ создается, а эта вьюшка обновляется, когда документ сохраняется.
Вот и получается что в промежуток времени между созданием и сохранением нового документа значение следующего номера не обновилось. В этом и есть проблема.
 
X

Xushnud

Что здесь ID? От куда берется?
ID это типа имя группы студентов(в этом примере)
А так наверное k-Fire прав, в тот момент наверное тот кто вводил данные открыл два таких документа и сохранил оба.
 
D

Don_VinNi

Спасибо, был не в курсе про кеширование. Но я как раз и не предлагал так сделать, просто предполагал что так могло быть сделано.
Этот код в вычисляемом поле находится, я правильно понял? Значит значение берется когда документ создается, а эта вьюшка обновляется, когда документ сохраняется.
Вот и получается что в промежуток времени между созданием и сохранением нового документа значение следующего номера не обновилось. В этом и есть проблема.
Думаю ты прав, спс.
 
30.05.2006
1 345
12
BIT
0
Этот код в вычисляемом поле находится, я правильно понял? Значит значение берется когда документ создается, а эта вьюшка обновляется, когда документ сохраняется.
Вот и получается что в промежуток времени между созданием и сохранением нового документа значение следующего номера не обновилось.
Делай это поле формы не Computed when composed, а просто Computed, но с "оговоркой":
@If(@IsNewDoc; @Yes; @Return(@ThisValue));
.. далее твой код.

Смысл: Компутед поле будет еще раз пересчитано в момент 1-го сохранения и вероятность дублирования практически обнулится
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!