Как се прави "Запомни ме"

amgcompany

Registered
Здравейте,

От няколко дена на сам се мъча да направя това "Запомни ме", но нещо не мога да се справя с Cookita-та. Не знам как да го направя пробвах с един код ама нещо не става. Ето го кода
PHP:
if(!(isset($_COOKIE['remember'])))
	{
		$ses = "vlez v profila";
		setcookie('remember','sas',time()+3600*24);
	}
	else
	{
		$ses = $_SESSION['user'];
	}
Ако може някой да помогне малко. Не е казано, че трябва с този код да се направи на мен просто това ми дойде на главата :D
 
setcookie('ime_na_cookie','$potrebitel',time()+3600*24);
проверката я правиш с кода горе дето си написал, а после проверяваш
if(isset($_COOKIE['ime_na_cookie']) && $_COOKIE['ime_na_cookie'] != NULL)
 
След последния if слагаш кода, който искаш да се изпълни, ако бисквитката съществува. Т.е. сесията му продължава и е логнат:

Код:
if(isset($_COOKIE['ime_na_cookie']) && $_COOKIE['ime_na_cookie'] != NULL) { 
//logged
} else {
//not logged
}
 
И аз скоро се интересувах точно от това и разгледах доста статии в интернет. Ако ползваш метод от горните постове ще оставиш голяма дупка в сайта си за session hijacking! В крайна сметка стигнах до следният начин на действие:

Когато потребителя изпрати данни за вход и е маркирано полето "запомни ме" се изпраща бисквитка на потребителя съдържаща потребителското име и token, който се генерира на момента и се запазва в базата данни.
Token-a е желателно да е от 20-30 символа най-малко, препоръчително е да са повече. Когато потребителя влезе във сайта и сесията му е изтекла, но бисквитката стои, прави се проверка дали потребителското име и token-а съществуват в базата данни. Ако не съществуват си логваш ip и тнт, ако съществува, логваш потребителя, ъпдейтваш token-а в базата данни и изпращаш нова бисквитка с новия token. Препоръчително е тези бисквитки да са с флаг HttpOnly. Препоръчително за всички бисквитки, чиято стойност няма да се използва от JavaScript, защото когато зададеш HttpOnly флаг на setCookie, бисквитката не се вижда от JS, само от сървъра.

Тази функция си я написах преди време и ми върши добра работа при генериране на token-чета. Свободно можеш да използваш нея или която и да е друга от интернет :)
PHP:
	function makeToken ($length=0) {
		
		$length = $length + 0;
		
		// make simple validation
		if ( ! $length || $length < 10) {
			
			// generate random length
			$length = rand(10, 250);
		}
		
		// holds generated characters
		$chars = "";
		
		while ($length--) {
			// gets random ascii character
			// ref. http://www.asciitable.com/
		    $chars .= chr(rand(33, 126));
		}
		
		return $chars;
	}
 
F1r3Fl3x каза:
И аз скоро се интересувах точно от това и разгледах доста статии в интернет. Ако ползваш метод от горните постове ще оставиш голяма дупка в сайта си за session hijacking! В крайна сметка стигнах до следният начин на действие:

Когато потребителя изпрати данни за вход и е маркирано полето "запомни ме" се изпраща бисквитка на потребителя съдържаща потребителското име и token, който се генерира на момента и се запазва в базата данни.
Token-a е желателно да е от 20-30 символа най-малко, препоръчително е да са повече. Когато потребителя влезе във сайта и сесията му е изтекла, но бисквитката стои, прави се проверка дали потребителското име и token-а съществуват в базата данни. Ако не съществуват си логваш ip и тнт, ако съществува, логваш потребителя, ъпдейтваш token-а в базата данни и изпращаш нова бисквитка с новия token. Препоръчително е тези бисквитки да са с флаг HttpOnly. Препоръчително за всички бисквитки, чиято стойност няма да се използва от JavaScript, защото когато зададеш HttpOnly флаг на setCookie, бисквитката не се вижда от JS, само от сървъра.

Тази функция си я написах преди време и ми върши добра работа при генериране на token-чета. Свободно можеш да използваш нея или която и да е друга от интернет :)
PHP:
	function makeToken ($length=0) {
		
		$length = $length + 0;
		
		// make simple validation
		if ( ! $length || $length < 10) {
			
			// generate random length
			$length = rand(10, 250);
		}
		
		// holds generated characters
		$chars = "";
		
		while ($length--) {
			// gets random ascii character
			// ref. http://www.asciitable.com/
		    $chars .= chr(rand(33, 126));
		}
		
		return $chars;
	}

Браво! :?:
 
1.
PHP:
$dni = 5; // kolko dni da pomni
setcookie('remember',ms5($username . $token . md5($password_no_md5)),time()+86400*$dni);

2.
PHP:
if(isset($_COOKIE['remember']) && preg_match('/^([0-9a-f]{32})$/',$_COOKIE['remember'])) {
check_login($_COOKIE['remember'], $token );
}

3.
PHP:
function check_login(cookie, $token ) {
$query = mysql_query("SELECT * FROM `table` WHERE MD5( CONCAT(`username`, '" . $token  . "', `md5_password`) ) = '" . $cookie . "'");

......

}
 

Back
Горе