Вечна сесия на даден потребител след логването му?

Illusion

Registered
Така и не разбрах как да създам вечна сесия след логване на даден потребител, за да не му иска вход през определено време ако не е активен.
 
Illusion каза:
Така и не разбрах как да създам вечна сесия след логване на даден потребител, за да не му иска вход през определено време ако не е активен.

Нестава със сесия прави се с бисквитки
Правиш вместо $_SESSION - $_COOKIE и за да съзадеш бискивтка се прави така вместо $_SESSION['login'] = $username - setcookie('login', ''.$username.', time()+3600*24, '/'); като time()+3600*24 се пада точно 24 часа след 24 часа на потребителят пак ще му иска вход, можеш да сложиш по-голямо време :]
 
ExpressYourself каза:
Illusion каза:
Така и не разбрах как да създам вечна сесия след логване на даден потребител, за да не му иска вход през определено време ако не е активен.

Нестава със сесия прави се с бисквитки
Правиш вместо $_SESSION - $_COOKIE и за да съзадеш бискивтка се прави така вместо $_SESSION['login'] = $username - setcookie('login', ''.$username.', time()+3600*24, '/'); като time()+3600*24 се пада точно 24 часа след 24 часа на потребителят пак ще му иска вход, можеш да сложиш по-голямо време :]
Аха, това го знаех, но като се замислих стигнах до решението, че всеки може да си редактира бисквитката и така да смени потребителя примерно с администратора и се сещаш какво става след това...

ПП: Имам идея, става ли вместо потребителя да се сложи криптирана парола с пет пъти md5, а реалната да се минава през два пъти md5?
 
Illusion каза:
ExpressYourself каза:
Illusion каза:
Така и не разбрах как да създам вечна сесия след логване на даден потребител, за да не му иска вход през определено време ако не е активен.

Нестава със сесия прави се с бисквитки
Правиш вместо $_SESSION - $_COOKIE и за да съзадеш бискивтка се прави така вместо $_SESSION['login'] = $username - setcookie('login', ''.$username.', time()+3600*24, '/'); като time()+3600*24 се пада точно 24 часа след 24 часа на потребителят пак ще му иска вход, можеш да сложиш по-голямо време :]
Аха, това го знаех, но като се замислих стигнах до решението, че всеки може да си редактира бисквитката и така да смени потребителя примерно с администратора и се сещаш какво става след това...

ПП: Имам идея, става ли вместо потребителя да се сложи криптирана парола с пет пъти md5, а реалната да се минава през два пъти md5?

Защо? сложи там нещо друго :]
Но просто ти давам с потребителско име за да можеш да го свъжиш по бързо със sqla иначе може да сложиш id-то с base64 или каквто беше там аз лично за първи път чувам че може да си редактират бисквитката :]
 
ExpressYourself каза:
Защо? сложи там нещо друго :]
Но просто ти давам с потребителско име за да можеш да го свъжиш по бързо със sqla иначе може да сложиш id-то с base64 или каквто беше там аз лично за първи път чувам че може да си редактират бисквитката :]
Има един адон за мозилата, с който можеш да си прегледаш бисквитките на сайтовете, в които създадени такива и могат да се редактират.
Ето снимка даже: http://store.picbg.net/pubpic/99/65/daf2e0daa63f9965.PNG
 
Възможно е да се редактират, затова ползвай данни, които сами по себе си не представляват интерес (потр. име, ид, ип адрес) - но заедно при една проверка връщат желания резултат.
Няма смисъл да слагаш ранг-а във бисквитка, защото току виж половината сайт се сдобил с администраторски права ;)
 
$user = base64_encode($username);
setcookie('login', ''.$user.', time()+3600*24);


$user = base64_decode($_COOKIE['login']);
SELECT * FROM `users` WHERE `username`='$user'
 
ExpressYourself каза:
$user = base64_encode($username);
setcookie('login', ''.$user.', time()+3600*24);


$user = base64_decode($_COOKIE['login']);
SELECT * FROM `users` WHERE `username`='$user'
Разбираш ли какво правиш в този случай и на къде отива целия сайт ако ползвам base64?
 
Illusion каза:
ExpressYourself каза:
$user = base64_encode($username);
setcookie('login', ''.$user.', time()+3600*24);


$user = base64_decode($_COOKIE['login']);
SELECT * FROM `users` WHERE `username`='$user'
Разбираш ли какво правиш в този случай и на къде отива целия сайт ако ползвам base64?

Давам примерче :]
 
Може да направиш така:

<?php
$pass = "razdva";
$hash = md5(md5($pass));
echo $hash
?>

Така ще криптира 2 пъти хаша.
 
Angry каза:
Може да направиш така:

<?php
$pass = "razdva";
$hash = md5(md5($pass));
echo $hash
?>

Така ще криптира 2 пъти хаша.

И после как ще го декриптира за да го сравни с базата данни ?
 
ExpressYourself каза:
Angry каза:
Може да направиш така:

<?php
$pass = "razdva";
$hash = md5(md5($pass));
echo $hash
?>

Така ще криптира 2 пъти хаша.

И после как ще го декриптира за да го сравни с базата данни ?
Еми паролата ще е криптирана и ДБ-то?
 
Illusion каза:
ExpressYourself каза:
Angry каза:
Може да направиш така:

<?php
$pass = "razdva";
$hash = md5(md5($pass));
echo $hash
?>

Така ще криптира 2 пъти хаша.

И после как ще го декриптира за да го сравни с базата данни ?
Еми паролата ще е криптирана и ДБ-то?

Хах има ли смисъл според мене паролата в дб-то се криптира тей като хакерите като ти хакнат дб-то и виждат паролите и ала бала раотите :]
Човека не е толкова прост, че да не земе паролата и да я смени пак с бисквитката... Според мене няма смисъл от тази идея

По-добре ид-то го криптирай и после го декриптирай никой няма да се досети :]
 
ExpressYourself каза:
Хах има ли смисъл според мене паролата в дб-то се криптира тей като хакерите като ти хакнат дб-то и виждат паролите и ала бала раотите :]
Човека не е толкова прост, че да не земе паролата и да я смени пак с бисквитката... Според мене няма смисъл от тази идея

По-добре ид-то го криптирай и после го декриптирай никой няма да се досети :]
Интересно :D . Вече целия форум разбра и видя идеята ти, но никой няма да се досети :?: . Добре, ще помисля за друг вариант. Давам точката на теб.
 
:shock:
Записваш потребителя и неговата парола в куки, и после правиш проверка дали кукито с потребителя и кукито с паролата са равни на тези от БД, ако не са, значи кукито е било редактирано и logout :)
 
Аз пък предпочитам друг вариант, според мен далеч по-сигурен.

1. Създавам си 40 символен случаен стринг. Примерно sha1(rand()).
2. Записвам в база данните стринга генериран в т.1. + IP адреса на потребителя.
3. Записваш бисквитка със стринга генериран в т.1. (Само стринга).
4. При всяка прегледана от потребителя страница правиш проверка дали бисквитката на потребителя е равна на тази, която си записал в база данните, както и дали IP адреса му е равен на този, който е използвал при логина. Ако едно от двете е различно = logout.

Предимства - няма никакъв начин да се заобиколи. Дори и някой да си редактира бисквитката, няма как да се направи администратор например, защото няма как да знае каква е бисквитката на админа. Защо? Защото не криптираме нито ID, нито потребителско име, парола или нещо такова :) Дори и по някаква случайност да се налучка (с тия 40 символа сам си сметни каква е вероятността), нищо няма да направи защото IP адреса му ще е различен.

Недостатъци - само един - потребителите с динамични IP адреси :) Ако се логнеш и в последствие си смениш IP-то съответно директно те Logout-ва. Може и да не се смята като недостатък, въпрос на гледна точка. Според мен не е, даже напротив.
 
MontefuckeR каза:
:shock:
Записваш потребителя и неговата парола в куки, и после правиш проверка дали кукито с потребителя и кукито с паролата са равни на тези от БД, ако не са, значи кукито е било редактирано и logout :)

Добре няма ли да е по-добре с id като го криптира?
 
MakeAWish
идеята за ключа е добра, но за ип-то съм твърдо против.

ExpressYourself, дали ще е ид или име няма значение освен от гледната точка за скоростта на заявката при проверките, ако знаеш и как да си направиш проверката дали стойността на кукито може да бъде реално потребителско име, тази проверка се прави преди проверката в базата данни, но дали такава проверка или проверка дали кукито е число е равностойно :)
 
MontefuckeR каза:
MakeAWish
идеята за ключа е добра, но за ип-то съм твърдо против.
Според мен е по-сигурно, устройва ме повече и така го прилагам в системките си. Дали ще се направи с или без запис на IP е по-скоро въпрос на вкус. Просто споделям как го правя аз - дали ще се използва 1:1 с написаното от мен или ще се дооформи идеята зависи само и единствено от разработчика :).

И твоят вариант не е лош

MontefuckeR каза:
Записваш потребителя и неговата парола в куки, и после правиш проверка дали кукито с потребителя и кукито с паролата са равни на тези от БД

Има обаче на къде да се дооформи. Можете и да направите микс от всичко предложено в темата + някой добавки. Като за начало препоръчвам да се добави salt, a.k.a. нещо такова
Код:
sha1(sha1($username . $id) . $salt)
Аз лично предпочитам sha1 пред md5 - някъде в и-нет бях чел, че някакъв (не му помня името за съжаление, за да издиря статията и да пусна линк тук) е открил начин да се разбие md5. Естествено начина не е публично достъпен, но все пак.. sha1 ми изглежда по-сигурно. Както и да е, това е друга тема.

Съвет към автора на темата - НИКОГА не използвай за сесия/бисквитка данни, които са видими от всеки потребител в сайта (Каквито са username и id) или поне ги комбинирай с нещо допълнително както съм показал няколко реда по-горе.

ExpressYourself каза:
По-добре ид-то го криптирай и после го декриптирай никой няма да се досети :]

От какъв зор да го "декриптира" (Кавичките не са сложени случайно. Помисли защо ^^)? Никой себеуважаващ се разработчик няма да използва функция, която има обратен алгоритъм (Лично мнение). Правиш точно обратното, вместо да "декриптираш" извършваш още една криптираща функция. Записваш в бисквитката криптираното id и след това го криптираш още веднъж - ако изходния хаш е еднакъв, то и първоначалния им вид е такъв.

Не съм сигурен дали обясних всичко на разбираем език, дано сте ме разбрали : )
 

Back
Горе