Опять не подходит потому что куки могут украсть.Откуда вы такие специалисты по безопасности беретесь?..
Вопрос остаётся - как реализовать нормальный и безопасный способ для такой функции, чтобы больше не приходилось использовать другие варианты после каждой очередной жалобы на взлом?Взлом через уведенную куку входит в топ 5 малореальных сценариев взлома, если у вас есть хоть какая-то защита от XSS.
Хранить IP последнего входа в аккаунт? Идея неплохая, но если каким-то магическим образом БД взломают, то все айпи попадут нехорошим людям.Оу, вас это больше всего расстраивает? Учитывая что 80% траффика сейчас идет через мобильные сети, айпи будет разниться при каждой сессии авторизации. И в данном случае вероятность такого взлома вы почему-то оцениваете практически как "магию", в то время как доступ к кукам пользователя у вас на уровне "ну, это точно случится, и скорее всего раньше, чем позже, любой может там гулять как у себя дома"...
я бы себя оценил где-то в 1500р/часЭто фантазии, не важно во сколько, ты себя оцениваешь. Твой труд стоит столько - сколько за него готовы заплатить на рынке труда. Если ты вообще на нем представлен, если ты не находишься на рынке, то стоимость твоего труда 0, и уровень твоей экпертизы не важен. Важно не то, как ты себя оцениваешь - а как тебя оценивает рынок.
Или тут только надо учить математику и все, но вроде знаю её но применять не особо умеюЕсли база есть, то учиться применению - примерно так же, как ребёнок учится ходить, учится говорить. Т.е. наблюдать, как это делают другие и пробовать-пробовать-пробовать, пока не начнёт получаться. Каких-то волшебных рецептов нет, просто мозг постепенно привыкнет мыслить определённым образом.
Зачем нужен Mutex? Есть ведь Monitor.
Mutex
- примитив синхронизации уровня ОС.Monitor
- инструмент синхронизации уровня среды выполнения.Mutex это разве не тот же семафор, только который может брать один поток?
Try*
методы. Они возвращают bool
- была ли операция успешна, а реальное возвращаемое значение передается через out
параметр*Safe
постфикс. Но использую я их только внутри класса и только для того, чтобы не писать TryGet*(out ...)
конструкциюremarks
секции указать, что метод не выкидывает исключение &
) как верно подметил Василий Банников )interface A extends B, C {}
interface B {}
type C = {}; // interface вполне может extends из type
interface A {
a: number;
}
interface A {
b: number;
}
const a: A = {a: 1, b: 2};
type A = B | C; // на interface такого не выразишь