Session and insert into DB

11 отговора 207 прегледа
#1

Session and insert into DB

Здравейте,

Имам сериозен проблем:
Имам сите които има списък с файлове и съответно тези файлове могат да се свалят. Въпросът обаче е че има две рестрикции:
1. Файловете да са защитени
2. Да има статистика на броя сваляния.

направих един файл които отваря заявения за сваляне файл, изчита го с fread(), сменя headers с тези на PDF и най отдолу на файла се прави едно инсертване в базата данни. Обаче се появи проблем:
Когато един файл се access-не инсъртванията са две във базата. Според мене това се получава от header() функцията, но немога да намерия начин да я оправя.
Опитах се да сложа слената консктукция:
if($_SESSION[time()] == ""){
something
}
$_SESSION[time()] = time();

ама пак ми вкарва по два записа, моля ако някой се е борил с такъв проблем да ми пише незабавно, че положението е много напечено!
10x

Отговор
в отговор на Heзнaйko #2

Re: Session and insert into DB

В отговор на:

направих един файл които отваря заявения за сваляне файл, изчита го с fread(),



по това което съм чел е по-добре да се използва file_get_contents, която дава повече сигурност.

За да помогнем за двойното инсертване paste-ни малко код де. По какво да познаем какво как и къде инсертваш.

Е тук нищо няма:[линк]
Отговор
в отговор на ro6avia #3

Re: Session and insert into DB

Рошав,
ако влезнеш в ICQ-то ще ти кажа повече подвобности.
Н.Чанков

Отговор
в отговор на Heзнaйko #4

Re: Session and insert into DB

Фаловете, които се дърпат случайно да не са PDF-и?

Отговор
в отговор на Lupi #5

Re: Session and insert into DB

Exactly! що?

Отговор
в отговор на Heзнaйko #6

Re: Session and insert into DB

Ами щото имах същия проблем с PDF-и. Acrobat Reader-а ми правеше не две, а три заявки за един файл и в базата се записваха три тегления.
Изхитрих се да проверявам времето между трите тегления - ако е примерно до 10 сек. в рамките на същата сесия и същия файл (и файлът е PDF), значи просто записвам един запис вместо три.

Отговор
в отговор на Lupi #7

Re: Session and insert into DB

В такъв случай, би могло да се пусне:

Content-type: application/octet-stream

И акробатът няма и да разбере.

Everything louder than everything else...
Отговор
в отговор на Lupi #8

Re: Session and insert into DB

Акробата не се ли опитва бързо да покаже началото на документа и останалото го дърпа когато решиш да го гледаш? Много дразни като почне да точи, след като ударя PageDown.

Тоя номер с няколкото заявки не може ли да се оправи с някаква бисквида?

--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
Отговор
в отговор на Dakota #9

Re: Session and insert into DB

Не си спомням вече, но май с octet-stream бях пробвал и пак не стана. Reader-а явно си детектваше формата и си го дърпаше като PDF.

Отговор
в отговор на Mycлoн #10

Re: Session and insert into DB

Май така прави - гледа да изкара първата страница, останалите когато ги поискаш. Ама и на PDF-и от една страница го правеше същия номер.
С бисквити не съм пробвал, пък и вече тоя проект го оте.ах

Отговор
в отговор на Lupi #11

Re: Session and insert into DB

Гледайте как го реших проблема:
направих един if със следното съдържание:

if(!isset($_GET[show])){ //в началото влиза тука
//вмъкни в базата лог-а, че е отворен PDF-а и с един header
header("Location:?id=".$_GET['id']."&show=1");
//прехвърлям страницата в горният if.
} else {
//дърпай от базата името на PDF-а, и го показвай
}

Тъй като header-а директно препраща /а не с JavaScript/ то при натискане на Back бутона браузера ми се връща при списъка с файлове, а не там където се записва log-a е това е решението и работи.

Айде лека и доходна!

Отговор
в отговор на Lupi #12

Re: Session and insert into DB

В отговор на:

С бисквити не съм пробвал, пък и вече тоя проект го оте.ах




Аз се бях сблъсквал с нещо подобно - скрипт дето праща файлове ( че и големи ) за даунлоуд. С всичките си му partial content-и и глупости. Чудех се обаче как да разбера, че клиента е получил целия файл и да му резна достъпа. Че и бисквити не исках да ползвам щото ме беше страх, че ще има мрънкания от вида "ползвам тука някакъв privacy плъгин на браузъра и не мога да даунлоудвам". Последно го оставих с период на свободно точене от около седмица и после... кръц. Сега се чудя дали е имало по-хубав начин. Иначе проекта е в миналото също като твоя.

--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
Отговор