$files = scandir(__DIR__);
unset($files[0],$files[1]);
$files_xy = [];
foreach ($files as $filename) {
$xy = filenameToXY($filename);
$files_xy[$xy[0]][$xy[1]] = $filename;
}
import re
def mySort(data):
convert = lambda text: int(text) if text.isdigit() else text.lower()
alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ]
return sorted(data, key=alphanum_key)
files = mySort(os.listdir(dir))
filename = files[len(files) - 1]
<div id="indicators">
<div id="ind-prices" class="indicator"> 1 </div>
<div id="ind-contacts" class="indicator"> 2 </div>
</div>
<div class="section">
<div id="prices"> цены </div>
<div id="contacts"> контакты </div>
</div>
<script>
jQuery(window).scroll(function(){
var $sections = $('.section');
$sections.each(function(i,el){
var top = $(el).offset().top-100;
var bottom = top +$(el).height();
var scroll = $(window).scrollTop();
var id = $(el).attr('id');
if( scroll > top && scroll < bottom){
$('#indicators .indicator.active').removeClass('active');
$('#ind-' + id).addClass('active');
}
})
});
</script>
var Min = 660;//минуты
var Min_value = 660;//минимум
var Max_value = 1320;//максимум
var Step = 30
function setTime($input) {
var hour = Math.floor(Min/60);
var min = Min % 60;
if (min < 10) {
min = '0' + min;
}
if (hour < 10) {
hour = '0' + hour;
}
$input.val(hour + ':' + min);
}
$('.decrease').click(function () {
if ((Min - Step) < Min_value) return;
Min -= Step;
if (Min <= 0) Min += 1440;
setTime($(this).parent().find('input'));
});
$('.increase').click(function () {
if ((Min + Step) > Max_value) return;
Min += Step;
if (Min >= 1440) Min -= 1440;
setTime($(this).parent().find('input'));
});
пароль соленый. Сессии храню в бд. Значение сессии - просто рандомная строка (в бд тип "binary" - для регистра). Используются транзакции бд с проверкой на существование, т.к. коллизию никто не отменял. Еще для надежности нужна привязка сессии к маске ip и периодическая смена значения сессии. В общем, есть некоторые тонкости в разработке системы авторизации. С ходу хорошо не сделать. Защиту от перебора можно сделать. Просто записываешь в бд обращения с несуществующей сессией. Если таких слишком много - делаешь бан какой-нибудь.
рандомная строка сессии создается из набора 90 символов и длинной в 32 символа. Комбинаций больше чем у md5. Какую-то информацию хранить в значении сессии не стоит, нужно лишь идентифицировать по этому значению. В бд сессий находится этот идентификатор с ссылкой на id юзера.