$_ADM_USER = array('id'=>0,'name'=>'','mail'=>'','supreme'=>0,'support'=>0,'news'=>0,'trade'=>0);
session_cache_limiter('nocache');
session_start();
if (!isset($_SESSION['ADM_VALID'])) {
$_SESSION['ADM_VALID'] = validatecookie();
}
if ($_SESSION['ADM_VALID']) {
$_ADM_USER = $_SESSION['ADM_USER'];
}
session_write_close();
function validatecookie() {
$valid = false;
if (empty($_COOKIE['auth']) ||
empty($_COOKIE['auth']['id']) ||
empty($_COOKIE['auth']['cookie']))
return $valid;
$auth = $_COOKIE['auth'];
$q = db_query("SELECT * FROM `".USER."` WHERE `id`='".$auth['id']."' AND `active`=1 LIMIT 1");
if (false !== ($row = db_fetch_row($q,1))) {
if ($auth['cookie'] == md5($row['pass'])) {
db_query("UPDATE `".USER."` SET `lastlogindate`='".date("m.d.y.H.i.s")."', `proxy`='".get_remote_ip()."' WHERE `id`='".intval($auth['id'])."'");
$_SESSION['ADM_USER'] = array('id'=>$row['id'],'name'=>$row['username'],'mail'=>$row['email'],
'supreme'=>$row['admn_all'],'support'=>$row['admn_sup'],'news'=>$row['admn_nws'],'trade'=>$row['admn_trd']
);
$valid = true;
}
}
return $valid;
}
Не совсем так. Часть, которую я выложил - это инклюд-заголовок. Если я в середине попытаюсь обратиться к переменной сессии, нужно ли будет использовать открытие сессии? Я использую session_write_close, так как в коде у меня возможна переадресация юзера на новую страницу через header(location...);Автор оригинала: SiMM
Вопрос был не в том, зачем использовать сессии, а в том, зачем использовать session_write_close? При быстровыполняющихся скриптах в этом нет необходимости. По крайней мере - сложно себе представляю такие ситуации, где эта функция необходима.
И соответственно, отсечь всех пользователей, сидящих через анонимные прокси? Т.е. я так понял, либо безопасность, либо никак.Автор оригинала: SiMM
Храни в сессии доступные параметры пользователя (IP, браузер клиента) и не допускай использования сессии при их отличии.
Читал я его, но плохо понял одно:Автор оригинала: SiMM
> Я использую session_write_close
ЗАЧЕМ?
> так как в коде у меня возможна переадресация юзера на новую страницу через header(location...);
Ну и что?
PHP FAQ: Сессии. Подробное описание работы и объяснение механизма.
session_start();
$_SESSION['var1'] = '1';
header('Location: go_away');
die;
Ну если в переменную сессии записать ip и информацию о браузере - то уникальности явно не получится. Да и, думаю, это тема другого разговора.Автор оригинала: SiMM
> И соответственно, отсечь всех пользователей, сидящих через анонимные прокси?
С какой кстати? Если прокси не меняет свой адрес каждые две минуты - никого ты не отсечёшь.
header('Location: go_away?'.SID);
Значит, просто сбили. Я на практике еще не пробовал, хотел сначала посоветоваться. Спасибо большое!Автор оригинала: SiMM
> Будет ли переменная $_SESSION['var1'] доступна в скрипте go_away, при условии, что механизм сессий работает?
Будет, если куки у пользователя включены, и не будет, если куки выключены - в FAQ это есть и даже объясняется, почему и как надо, чтобы работало всегда.
PHP:header('Location: go_away?'.SID);
Ну я думаю, подстраховываться надо тем, чтобы напрямую проверять права пользователя, там, где это нужно, а не пользоваться куками и сессиями. Скажем так, я просто хотел узнать, как защитить пользователя, от того, что его аккаунтом могут воспользоваться для корыстных целей.Автор оригинала: SiMM
> Ну если в переменную сессии записать ip и информацию о браузере - то уникальности явно не получится
Уникальности чего? И опять же - это всего лишь дополнительная мера подстраховки, а не панацея от всех бед.