kolodkin 0 Опубликовано 16 марта, 2009 Жалоба Share Опубликовано 16 марта, 2009 Ряд вопросов: 1.При установке магазина есть пункт - Сессии сохранять в базе или файлах. Как сейчас узнать, где хранятся сессии? Как изменить настройки, чтобы сессии хранились в базе? Где их лучше хранить? 2.Что значит Воссоздавать сессию? что изменится, если этот пункт включить? 3.По умолчанию Сессия администратора 14400с (4 часа). Меня из админки выкидывает через 15 минут, какое бы время не стояло. с чем это может быть связано? Спасибо Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 16 марта, 2009 Жалоба Share Опубликовано 16 марта, 2009 1. В /includes/configure.php и /admin/includes/configure.php, в самом низу константа STORE_SESSIONS, что б был в базе, нужно в этой константе указать mysql. 2. Не знаю, что значит, я с этой опцией не разбирался особо. Ничего страшного не будет в любом случае, вне зависимости, включено или нет. 3. Видимо, с настройками сервера связано, наверное только хостера просить менять значение. Ссылка на сообщение Поделиться на другие сайты
kolodkin 0 Опубликовано 20 апреля, 2009 Автор Жалоба Share Опубликовано 20 апреля, 2009 По умолчанию Сессия администратора 14400с (4 часа). Меня из админки выкидывает через 15 минут, какое бы время не стояло. с чем это может быть связано? Поставил хранить сессии в базе, тогда продолжительность сессии стала соответствовать времени в настройках. Появился другой вопрос: время жизни куки - до закрытия браузера. Что изменить в коде, чтобы при открытии браузера сессия рестартовала? Т.е. нужно, если Посетитель положил товар в корзину, то завтра из этой корзины ничего не исчезнет. Ссылка на сообщение Поделиться на другие сайты
mnas 0 Опубликовано 20 апреля, 2009 Жалоба Share Опубликовано 20 апреля, 2009 3.По умолчанию Сессия администратора 14400с (4 часа). Меня из админки выкидывает через 15 минут, какое бы время не стояло. с чем это может быть связано? Плюсадин. Реально бесит, что параметр не работает. Выкидывает через 15 минут. Ссылка на сообщение Поделиться на другие сайты
kolodkin 0 Опубликовано 21 апреля, 2009 Автор Жалоба Share Опубликовано 21 апреля, 2009 Плюсадин. Реально бесит, что параметр не работает. Выкидывает через 15 минут. я же пишу, что работает, если сессии хранить в базе, а не в файлах. Нужно чтобы не выкидывало при закрытии браузера. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 21 апреля, 2009 Жалоба Share Опубликовано 21 апреля, 2009 kolodkin По умолчанию вроде такого нет, т.е. что б содержимое корзины постоянно сохранялось и как сделать я не знаю. Ссылка на сообщение Поделиться на другие сайты
Dr.Hell 0 Опубликовано 21 апреля, 2009 Жалоба Share Опубликовано 21 апреля, 2009 Для зарегеных пользователей содержимое корзины сохраняется. Для незарегеных сбрасывается. Ссылка на сообщение Поделиться на другие сайты
kolodkin 0 Опубликовано 21 апреля, 2009 Автор Жалоба Share Опубликовано 21 апреля, 2009 Для зарегеных пользователей содержимое корзины сохраняется. Для незарегеных сбрасывается. Ага, но я говорю про сессии. Т.е. завтра открыв браузер и зайдя в магазин, зарегистрированный пользователь должен быть залогинен (если он не нажал выход конечно). Вот как на этом форуме, один раз залогинился и он тебя помнит. Ссылка на сообщение Поделиться на другие сайты
Dr.Hell 0 Опубликовано 21 апреля, 2009 Жалоба Share Опубликовано 21 апреля, 2009 Это уже не сессия, а куки. Сессия живет только до закрытия браузера, куки живут столько, сколько в них прописано. Должна быть какая-то настройка. Сейчас у меня в куках сайта магазина только cookie_test: please_accept_for_session и айди сессии. Вообще, обычно в магазинах делают так, что вроде бы он тебя помнит, но при оформлении товара и изменении настроек все равно спрашивает пароль, чтобы кто попало не купил чего-нибудь под твоим аккаунтом. Так на амазоне, например. А в простеньких магазинчиках вообще никогда не видел, чтобы сохранялись куки. Ссылка на сообщение Поделиться на другие сайты
kolodkin 0 Опубликовано 22 апреля, 2009 Автор Жалоба Share Опубликовано 22 апреля, 2009 вот нашел, только не знаю правильно или нет includes/application_top.php строка 271 ini_set('session.cookie_lifetime', '0'); строка 268 session_set_cookie_params(0, $cookie_info['cookie_path'], $cookie_info['cookie_domain']); 0 - время хранения сессии в секундах. Если поставить больше, то товары на самом деле не сбрасываются при закрытии браузера, "логинизация" тоже. Вот только ребята с freelance, говорят что это не очень правильно, нужно чтобы авторизация шла через куки, а не сессия хранилась. Кто как думает? Ссылка на сообщение Поделиться на другие сайты
Dr.Hell 0 Опубликовано 23 апреля, 2009 Жалоба Share Опубликовано 23 апреля, 2009 Насколько я понимаю, главная опасность тут в том, что, если у пользователя стырят куки session id, то кто угодно сможет под ним залогиниться. Ссылка на сообщение Поделиться на другие сайты
MaZa 10 Опубликовано 21 мая, 2014 Жалоба Share Опубликовано 21 мая, 2014 Ряд вопросов: 1.При установке магазина есть пункт - Сессии сохранять в базе или файлах. Как сейчас узнать, где хранятся сессии? Как изменить настройки, чтобы сессии хранились в базе? Где их лучше хранить? 2.Что значит Воссоздавать сессию? что изменится, если этот пункт включить? 3.По умолчанию Сессия администратора 14400с (4 часа). Меня из админки выкидывает через 15 минут, какое бы время не стояло. с чем это может быть связано? Спасибо Хотелось бы поднять вопрос. Действительно непонятно совершенно, что делает опция "воссоздавать сессию". Администрация/тех.поддержка движка Vamshop, поработайте, пожалуйста! Лично, могу ответить по 2-м пунктам: 1. Сессии могут хранится или в базе данных или на веб-сервере. Разница в том, что работать с сессиями (читать/менять/искать) удобнее используя СУБД. Но в хранении на веб-сервере есть свои преимущества - скорость работы выше за счет того, что не нужно слать постоянно запросы в СУБД и запись идет на ПЗУ (сразу на винчестеры минуя СУБД), а это иногда быстрее, особенно, если СУБД удаленная. Ну, а где хранить, как было замечено выше, регулируется параметром STORE_SESSION в конфигурационном файле движка. 3. Это может быть связано с настройкой интерпретатора php. а конкретно с директивой session.gc_maxlifetime. И я думаю, вы уже догадались, почему при изменении типа хранилища (с php на mysql) у вас заработала настройка время жизни сессии. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 21 мая, 2014 Жалоба Share Опубликовано 21 мая, 2014 Что делает эта опция можно посмотреть в /inc/vam_session_recreate.inc.php И, соотственно, в файлах, где используется, например в login.php, checkout.php, create_account.php Ссылка на сообщение Поделиться на другие сайты
MaZa 10 Опубликовано 21 мая, 2014 Жалоба Share Опубликовано 21 мая, 2014 ну, спасибо большое. вы очень помогли. примерно минут 5 сэкономили. p.s.: это сарказм. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 21 мая, 2014 Жалоба Share Опубликовано 21 мая, 2014 Так я вообще отвечаю, раз этот вопрос был в теме, может кому полезно будет. Может кто через год, два, три, попадёт в эту тему из поисковиков или ещё как. Ссылка на сообщение Поделиться на другие сайты
MaZa 10 Опубликовано 21 мая, 2014 Жалоба Share Опубликовано 21 мая, 2014 ну, а я говорю, что пользы от этого поста не очень много. ладно... дойдут руки - разберусь и отпишусь. на данный момент есть кучу гипотез нужно проверять. Ссылка на сообщение Поделиться на другие сайты
MaZa 10 Опубликовано 24 июня, 2014 Жалоба Share Опубликовано 24 июня, 2014 Всё.. логинится по 100 раз на день просто зае Дошли руки наконец-то :) Поехали. 2 Support: Начну с того, что такого файла как вы сказали (/inc/vam_session_recreate.inc.php), скорее всего не существует. пруф 1 (скачанный только что демо-дистрибутив, версия 1.72) пруф 2 (find . -name vam_session_recreate.inc.php) 2 all: Теперь, что касается функции (далее сокр. ф.) "Воссоздать сессию". для начала найдем ее (grep -ir "recreate" . -C 6 --color=auto): называется она vam_session_recreate(); находится в двух файлах: $ grep -lir -E "function\s+vam_session_recreate()" . ./admin/includes/functions/sessions.php ./includes/functions/sessions.php Теперь листинг самой функции: То есть, ф. Воссоздать сессию занимается тем, что разрушает текущую сессию, перед этим записав её данные в память, и создает новую с теми данными, которые были. Короче, создает заново такую же сессию. Единственно, что из-за этого изменится так это идентификатор этой сессии. Теперь становится более понятным описание к этой функции: Воссоздавать сессию для генерации нового ID кода сессии при входе зарегистрированного покупателя в магазин, либо при регистрации нового покупателя Для чего нужно? Источник: http://forums.oscommerce.com/topic/317530-disadvantages-to-recreate-sessions-true/ Даю примерный перевод (подправьте, плиз, кто лучше знает инглиш): Со слов знатока, мы узнали, что данная опция защищает нас от несанкционированного использования сессий. Но как именно это защищает? Давайте рассмотрим наглядно ситуацию без включенной опции "воссоздать сессию". 1. Вы админ, зашли к себе на сайт (ваш браузер и сайт установили сеанс посетителя, создав для вас сессию); 2. Не дремлющий злоумышленник крадёт (по сути копирует) вашу сессию себе на компьютер; 3. Вы, проходите авторизацию и получаете права администратора; 4. Злоумышленник используя вашу сессию тоже получает права администратора; Вариант с включенной опцией "воссоздать сессию". 1. Вы админ, зашли к себе на сайт (ваш браузер и сайт установили сеанс посетителя, создав для вас сессию "А"); 2. Не дремлющий злоумышленник крадёт (по сути копирует) вашу сессию "А" себе на компьютер; 3. Вы, проходите авторизацию и получаете права администратора; 4. Сайт удаляет сессию "А" и создаёт сессию "Б" для вас; 5. Злоумышленник пытается использовать вашу сессию "А", но она больше не котируется сайтом; 6. Злоумышленник ворует сессию авторизованного администратора "Б"; Лично я не вижу смысла делать пересоздание сессии только после авторизации. Возможно данную конструкцию заложили как фундамент, чтобы в будущем её развивать, если понадобится. Потому что с общей идеей я согласен. Мы зашли на сайт - с правами "А". Прошли авторизацию - получили права "Б" или "В". Новые полномочия - новая сессия/сеанс. Логично и вроде бы мудро. Продолжение следует... Ссылка на сообщение Поделиться на другие сайты
MaZa 10 Опубликовано 4 июля, 2014 Жалоба Share Опубликовано 4 июля, 2014 В прошлом сообщении я обозревал функцию "Воссоздать сессию". Было написано много букав, по этому изложу резюме: ф. Воссоздать сессию занимается тем, что генерирует новый идентификатор сессии для пользователя при авторизации/регистрации. Для того чтобы предотвратить несанкционированное использование сессии. С точки зрения безопасности системы вещь нужная, но в той реализации в какой она сейчас есть вещь практически бесполезная, imho. Сегодня я бы хотел рассмотреть другие функции настройки для сессий, а именно: Принудительное использование Cookie Проверять переменную User Agent Проверять IP адрес Сессия администратора Сессия покупателя Почему именно их? Потому что в этой связке можно достичь запоминания пользователя на длительное время без риска быть взломанным. Суть вопроса: Настроить магазин так, чтобы пользователь, вернувшись через месяц был авторизован, при этом избежать ситуации, когда третья сторона представляется магазину от имени администратора. Принудительное использование Cookie includes/application_top.php if (SESSION_FORCE_COOKIE_USE == 'True') { vam_setcookie('cookie_test', 'please_accept_for_session', time() + 60 * 60 * 24 * 30, $cookie_info['cookie_path'], $cookie_info['cookie_domain']); if (isset ($_COOKIE['cookie_test'])) { session_start(); include (DIR_WS_INCLUDES.'tracking.php'); $session_started = true; } } else { session_start(); include (DIR_WS_INCLUDES.'tracking.php'); $session_started = true; } Данная печенька "cookie_test" нужна как статическая опора, чтобы определить включены ли куки в браузере или нет. Идея проста до безобразия. Мы оставляем в браузере клиента куки со статическим именем и обращаемся к ней, если она существует - значит куки в браузере включены, если нет — выключены. Проверять переменную User Agent includes/application_top.php // verify the browser user agent if the feature is enabled if (SESSION_CHECK_USER_AGENT == 'True') { $http_user_agent = strtolower($_SERVER['HTTP_USER_AGENT']); $http_user_agent2 = strtolower(getenv("HTTP_USER_AGENT")); $http_user_agent = ($http_user_agent == $http_user_agent2) ? $http_user_agent : $http_user_agent.';'.$http_user_agent2; if (!isset ($_SESSION['SESSION_USER_AGENT'])) { $_SESSION['SESSION_USER_AGENT'] = $http_user_agent; } if ($_SESSION['SESSION_USER_AGENT'] != $http_user_agent) { session_destroy(); vam_redirect(vam_href_link(FILENAME_LOGIN)); } } Принцип работы: Достается имя браузера (user agent) из текущей сессии и сравнивается с именем, которое обратилось в данный момент. Простыми словами, если вы открыли сессию с браузером ФФ, то авторизоваться в системе под вашим именем будет нельзя до тех пор, пока не совпадут имена обозревателей. В противном случае сессия под которой будет попытка авторизации разрушится. Проверять IP адрес includes/application_top.php // verify the IP address if the feature is enabled if (SESSION_CHECK_IP_ADDRESS == 'True') { $ip_address = vam_get_ip_address(); if (!isset ($_SESSION['SESSION_IP_ADDRESS'])) { $_SESSION['SESSION_IP_ADDRESS'] = $ip_address; } if ($_SESSION['SESSION_IP_ADDRESS'] != $ip_address) { session_destroy(); vam_redirect(vam_href_link(FILENAME_LOGIN)); } } Принцип работы, как мы видим, точно такой же как и с именем обозревателя. То есть сравнивается ip которое в сессии с тем, с которого обращаются. Сессия администратора и Сессия покупателя — эти два параметра устанавливают php директиву session.gc_maxlifetime. ./admin/includes/functions/sessions.php ./includes/functions/sessions.php @ini_set('session.gc_maxlifetime', SESSION_TIMEOUT_CATALOG); А также регулируют время жизни сессии в базе данных mysql. function _sess_write($key, $val) { $expiry = time() + SESSION_TIMEOUT_CATALOG; $value = addslashes($val); $qid = vam_db_query("select count(*) as total from " . TABLE_SESSIONS . " where sesskey = '" . $key . "'"); $total = vam_db_fetch_array($qid); if ($total['total'] > 0) { return vam_db_query("update " . TABLE_SESSIONS . " set expiry = '" . $expiry . "', value = '" . $value . "' where sesskey = '" . $key . "'"); } else { return vam_db_query("insert into " . TABLE_SESSIONS . " values ('" . $key . "', '" . $expiry . "', '" . $value . "')"); } } ... function _sess_gc($maxlifetime) { vam_db_query("delete from " . TABLE_SESSIONS . " where expiry < '" . time() . "'"); return true; } Тут важно понимать для чего разделили время жизни сессии одминов и юзверей. Для не просвещенных, объясню. Так, как администратор является привилегированным пользователем, который может много чего, то разумно было бы усилить контроль доступа к таким привилегиям. И это достигается за счет уменьшения времени сеанса администратора. То есть, простыми словами, ставим для админов сессию по-меньше, чтобы те почаще вводили свой пароль, для того чтобы минимизировать риск несанкционированного доступа под их именем. Продолжение следует... Ссылка на сообщение Поделиться на другие сайты
KoVaLsKy 59 Опубликовано 5 июля, 2014 Жалоба Share Опубликовано 5 июля, 2014 одного не могу понять. суть всех этих изобретений велосипеда в том, чтобы когда пользователь вернулся на сайт - его корзина не была пуста? если да, то не проще в куки id товара записывать и по возвращении восстанавливать в корзине эти товары? м? единственное, в чем тут виден плюс (это Я про операции, описанные MaZa это то, что не получится теоретически того, что пока пользователь не залогинен - одни товары в корзине, залогинился - другие) Ссылка на сообщение Поделиться на другие сайты
MaZa 10 Опубликовано 9 июля, 2014 Жалоба Share Опубликовано 9 июля, 2014 одного не могу понять. суть всех этих изобретений велосипеда в том, чтобы когда пользователь вернулся на сайт - его корзина не была пуста? это не изобретения вовсе, а необходимый функционал для полноценной работы системы... все эти настройки сессий регулируют... ползунок) мой вот где) безопасность<[( + )]===============>производительность т.е. если мы делаем удобно и безопасно от этого страдает сервер, потому что он сильнее напрягается, потому что начинает хранить больше и обрабатывать больше сессий :) Выходит, что просто незачем писать в куки какую либо инфу кроме айди сессии, т.к. вся инфа уже есть в сессии. Ещё раз повторюсь, я не описывал операции. Я обозревал функционал движка раздела Сессии. т.к. мне было необходимо разобраться в этом. А также я решил поделится с теми, кому тоже интересно разобраться, но в лом колупаться. :3 Ссылка на сообщение Поделиться на другие сайты
KoVaLsKy 59 Опубликовано 10 июля, 2014 Жалоба Share Опубликовано 10 июля, 2014 та нет. Я согласен штука нужная и интересная. Вопрос в том, не принесет ли она проблем на 5ю точку и не будет ли в магазине за раз 500 админом под 1 аккаунтом сидеть и жизнь портить Ссылка на сообщение Поделиться на другие сайты
MaZa 10 Опубликовано 11 июля, 2014 Жалоба Share Опубликовано 11 июля, 2014 ну, у меня всё чики-пики) проблемы на 5-ю точку голова безмозглая всегда приносит, а не настройка сессий :D p.s.: я планирую в эту тему ещё написать заключительное сообщение, где я все подытожу и напишу как сделать запоминание на долго и почему. Ссылка на сообщение Поделиться на другие сайты
KoVaLsKy 59 Опубликовано 11 июля, 2014 Жалоба Share Опубликовано 11 июля, 2014 ну, у меня всё чики-пики) проблемы на 5-ю точку голова безмозглая всегда приносит, а не настройка сессий :D p.s.: я планирую в эту тему ещё написать заключительное сообщение, где я все подытожу и напишу как сделать запоминание на долго и почему. вот это было бы здорово. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 11 июля, 2014 Жалоба Share Опубликовано 11 июля, 2014 MaZa Может это всё как-то в раздел FAQ перенести отдельным сообщением, что б тема на форуме не потерялась!? Ссылка на сообщение Поделиться на другие сайты
MaZa 10 Опубликовано 11 июля, 2014 Жалоба Share Опубликовано 11 июля, 2014 Ребята, тут мне по работе пришлось ещё разобраться с тем, как наш движок определяет откуда пришли по $_SERVER['HTTP_REFERER'].. там целый модуль есть, который этим занимается. он ещё и историю просмотра страниц ведет. Эта вся информация, которую движок собрал и обработал тоже хранится в Сессии. Понимание того, какие данные хранятся в сессиях, которые мы настраиваем, тоже было бы весьма полезно, имхо. Вообщем, потерпите, мне нужно с этим вопросом разобраться и тогда я закончу статью по сессиям и там дальше будет видно что и как в ЧаВо переносить. Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения