Въпрос за Сесии

pechkata

Registered
Здравеите,



Ето така задавам сесия ( при логване )

$_SESSION['id'] = $user['id'];


Ето така е проверявам
if(isset($_SESSION['id']))

и така дърпам данните за логнатия потребител
$user= mysql_fetch_array($_SESSION['id']);


1.Трябва ли да проверявам $_SESSION['id'] дали е числo
2.Правилния подход ли използвам при дъпрането на данните при логнат потребител
 
Хубаво е всяка информация която е ползваш някъде по кода да си е защитиш, поне до някаква степен.

Тоест ако очакваш да е само число ползвай (int) или при проверка is_numeric.
Ако очакваш да са само username може да ползваш някой регулярен израз и т.н. или пък да ескейпваш информацията.

При твоя случай аз бих работи ето така със този вид сесия.

1. Очаквам, че id е число.

PHP:
<?php

/** Тук не слагам (int) защото очаквам че $user['id'] е генерирана от БД
 и би трябвало да си е число, но все пак ако желаеш можеш да си 
сложиш (int), същото важи и за user_name, при него разбира се друг тип ще е */

$_SESSION['logged']['user_id'] = $user['id'];
$_SESSION['logged']['user_name'] = $user['user_name'];

?>

И тук показваме информацията:
PHP:
<?php

function validUser($name) {
if(!preg_match('/^[a-zA-Z0-9_]{3, 20}$/', $name))
{
unset($_SESSION['logged']);
return false;
}

return $name;

}

if(isset($_SESSION['logged'])) {

$UserID = (int)$_SESSION['logged']['user_id'];
$UserName = validUser($_SESSION['logged']['user_name']);

}

?>

Разбира се това е общо казано, може да поработиш и над защитата от ses hjacking и т.н..

Регулярния израз може да го направиш и за preg_replace, и вместо да ти unsetva, то само да заменя и т.н. Разбира се този регулярен израз трябва да е еднакав и при регистрацията и при логина на юзера.

EDIT:
Редактирах регулярният израз, бях забравил да сложа от колко до колко символа и коя променлива да проверява.
 
eddyy93 каза:
Хубаво е всяка информация която е ползваш някъде по кода да си е защитиш, поне до някаква степен.

Тоест ако очакваш да е само число ползвай (int) или при проверка is_numeric.
Ако очакваш да са само username може да ползваш някой регулярен израз и т.н. или пък да ескейпваш информацията.

При твоя случай аз бих работи ето така със този вид сесия.

1. Очаквам, че id е число.

PHP:
<?php

/** Тук не слагам (int) защото очаквам че $user['id'] е генерирана от БД
 и би трябвало да си е число, но все пак ако желаеш можеш да си 
сложиш (int), същото важи и за user_name, при него разбира се друг тип ще е */

$_SESSION['logged']['user_id'] = $user['id'];
$_SESSION['logged']['user_name'] = $user['user_name'];

?>

И тук показваме информацията:
PHP:
<?php

function validUser($name) {
if(!preg_match('/^[a-zA-Z0-9_]{3, 20}$/', $name))
{
unset($_SESSION['logged']);
return false;
}

return $name;

}

if(isset($_SESSION['logged'])) {

$UserID = (int)$_SESSION['logged']['user_id'];
$UserName = validUser($_SESSION['logged']['user_name']);

}

?>

Разбира се това е общо казано, може да поработиш и над защитата от ses hjacking и т.н..

Регулярния израз може да го направиш и за preg_replace, и вместо да ти unsetva, то само да заменя и т.н. Разбира се този регулярен израз трябва да е еднакав и при регистрацията и при логина на юзера.

EDIT:
Редактирах регулярният израз, бях забравил да сложа от колко до колко символа и коя променлива да проверява.

Мерси
Заслужи си точката.
 

Back
Горе