Как наверное многие знают, что сессии в движке хранятся в базе в зашифрованном виде, так вот захотел я кешировать сессии в памяти, т.е. что-бы не дербанить каждый раз базу, было-бы прикольно кешировать это всё в памяти, причём движок позволяет-же...
Но проблема, что чат тоже дербанит базу, что-бы получить эту самую сессию, вот код получения ID пользователя:
Так вот на одном форуме я увидел совет, сохранять ID пользователя в куки, а потом эти куки уже брать чатом и тем-самым базу дербанить ненужно и кешировать сессии можно, код получился уже такой:
Создаём куки так:
Теперь вы уже наверное поняли сразу в чём подвох, супер-пупер мега-хакер может подменить куки в своём браузере и войти под любым пользователем в чате !
Пример как это сделать в Опере, заходите на форум, далее Настройки->Управление Куками->Выбираете этот мега-крутой сайт, далее находите cc_xf_user=... и меняете на ID нужного пользователя, т.е. если введёте 1, то зайдёте под моим никнеймом, минуя авторизацию !
Но проблема, что чат тоже дербанит базу, что-бы получить эту самую сессию, вот код получения ID пользователя:
Код:
function getUserID() {
$userid = 0;
if (!empty($_SESSION['basedata']) && $_SESSION['basedata'] != 'null') {
$_REQUEST['basedata'] = $_SESSION['basedata'];
}
if (!empty($_REQUEST['basedata'])) {
if (function_exists('mcrypt_encrypt')) {
$key = KEY_A.KEY_B.KEY_C;
$uid = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($_REQUEST['basedata']), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
if (intval($uid) > 0) {
$userid = $uid;
}
} else {
$userid = $_REQUEST['basedata'];
}
}
if (!empty($_COOKIE['xf_session'])) {
$sql = ("SELECT `session_data` FROM `".TABLE_PREFIX."session` WHERE `session_id` = '".$_COOKIE['xf_session']."'"); $query = mysqli_query($GLOBALS['dbh'],$sql);
$sess2 = mysqli_fetch_assoc($query);
$sess3 = unserialize($sess2['session_data']);
if(!empty($sess3['user_id'])) {
$userid = $sess3['user_id'];
} else {
$userid = 0;
}
}
$userid = intval($userid);
return $userid;
}
Так вот на одном форуме я увидел совет, сохранять ID пользователя в куки, а потом эти куки уже брать чатом и тем-самым базу дербанить ненужно и кешировать сессии можно, код получился уже такой:
Код:
function getUserID() {
$userid = 0;
if (!empty($_SESSION['basedata']) && $_SESSION['basedata'] != 'null') {
$_REQUEST['basedata'] = $_SESSION['basedata'];
}
if (!empty($_REQUEST['basedata'])) {
$userid = $_REQUEST['basedata'];
}
if (!empty($_COOKIE['cc_xf_user'])) {
$a = explode(',',$_COOKIE['cc_xf_user']);
$userid = $a[0];
}
return $userid;
}
Создаём куки так:
Код:
<script type="text/javascript">
var userid = {$visitor.user_id};document.cookie = "cc_xf_user="+userid;
</script>
Теперь вы уже наверное поняли сразу в чём подвох, супер-пупер мега-хакер может подменить куки в своём браузере и войти под любым пользователем в чате !
Пример как это сделать в Опере, заходите на форум, далее Настройки->Управление Куками->Выбираете этот мега-крутой сайт, далее находите cc_xf_user=... и меняете на ID нужного пользователя, т.е. если введёте 1, то зайдёте под моим никнеймом, минуя авторизацию !