Вы не зашли.
Хм. А что мне мешает сделать все без сессии?
В базе есть поле для cookie_id по нему пусть и получают доспуп пользователи. Какого фига сессия нужна там?

Чем сессия будет каждый раз open+unserialize лучше уж запрос в базу.
Может понадобиться обычная сессия для captcha только наверно.
Либо у меня горячка, либо озарение простых вещей

Хотя если файл сессии сохранился, то в принципе все будет быстро...
Код:
<?php |
|
//Набросок. |
|
//+ SESSION// |
//! KEY `session_id` |
|
if (isset($_COOKIE[SESSION_NAME])) { |
/* |
session_name(SESSION_NAME); |
session_start(); |
|
if (! isset($_SESSION[SESSION_NAME])) { |
|
$_SESSION = array(); |
*/ |
$result = $db->prepare("SELECT `users`.`user_id`, `users`.`user_title`, `users`.`user_sex`, `users`.`user_name` FROM `users` WHERE `users`.`session_id` = ? AND `users`.`session_expire` > NOW() LIMIT 1;"); |
$result->execute(array($_COOKIE[SESSION_NAME])); |
|
if ($result->rowCount()) { |
/* |
$_SESSION[SESSION_NAME] = true; |
session_set_cookie_params(SESSION_EXPIRE, |
SESSION_PATH, |
SESSION_DOMAIN, |
SESSION_SECURE, |
SESSION_HTTPONLY); |
session_regenerate_id(true); |
$_SESSION += $result->fetch(); |
*/ |
$user = $result->fetch(); |
/*$result = $db->prepare("UPDATE `users` SET `users`.`session_expire` = NOW() + INTERVAL '" . SESSION_EXPIRE . "' SECOND, `users`.`session_id` = :new WHERE `users`.`session_id` = :old LIMIT 1;"); |
$result->execute(array(':old' => $_COOKIE[SESSION_NAME], |
':new' => $_COOKIE[SESSION_NAME] = session_id()));*/ |
} |
else { |
|
setcookie(SESSION_NAME, |
null, //Session value. |
0, //Session expire. |
SESSION_PATH, |
SESSION_DOMAIN, |
SESSION_SECURE, |
SESSION_HTTPONLY); |
/* unset($_COOKIE[SESSION_NAME], $_SESSION); |
session_destroy(); |
*/ |
} |
//} |
} |
//- SESSION// |
Добавлено спустя 1 минуту 56 секунд:
Отредактировано tipsun (2012.06.29 18:06)
Cookie сгенерировать и засунуть в базу. Срок годности 3 дня, допустим. Или как-то так.
Да, на этом форуме вроде, как я посмотрел, такая же схема.
Отредактировано tipsun (2012.06.30 00:12)
Если без срока в базе, то можно будет взломать, нет?
Зато намного быстрее работать будет.
Выдавай в куки временный хеш...например если чел авторизировался ему в куки хеш..вышел кеш заменяется на любой случайный...если не дурак поймёш
Отредактировано WapStyle (2012.07.03 21:09)
WapStyle, спасибо за идею.
Добавлено спустя 8 минут 20 секунд: Так.
У меня, типа

, есть отдельная таблица с активными/онлайн. Может сделать раздельно?
Там у меня записи не удаляются. (REPLACE).
Можно, в принципе зачищать поля с id=0 т.к. гости его не имеют.
Значит вполне возможен вариант с проверкой юзеров, которые не подавали активности, скажем, 20 часов.
Код:
<?php |
|
//+ ACTIVITY// |
$qt = 'REPLACE `activity` ' |
. "SET `activity`.`active_id` = '" . ((int) @$user['id']) . "', " |
. '`activity`.`active_ip` = ?, ' |
. '`activity`.`active_browser` = ?, ' |
. "`activity`.`active_point` = NOW() + INTERVAL '" . $ini['activityExpire'] . "' SECOND;"; |
|
$db->prepare($qt) |
->execute(array($_SERVER['REMOTE_ADDR'], |
$_SERVER['HTTP_USER_AGENT'])); |
//- ACTIVITY// |
|
/* |
в $ini у меня типа настройки стандартные или замещеные с базы. |
Сейчас подумал, что типа зачем вытаскивать настройки, когда наверно там же в запросе можно обратиться к таблице с настройками. Или такого рода настройки вообще в константу? ХЗ. |
*/ |
Отредактировано tipsun (2012.07.03 23:11)
WapStyle, да. Очень хорошее решение.
Запланировать каждую ночь 1 проверку.
У кого есть отметка запомнить, оставлять куку. Другим очищать в базе поле кука_ид.
Это уже раздел cron наверно. Надо будет почитать что и как там.