Перейти к содержанию
Форум поддержки пользователей VamShop

продолжительность сессии


Рекомендуемые сообщения

Ряд вопросов:

1.При установке магазина есть пункт - Сессии сохранять в базе или файлах. Как сейчас узнать, где хранятся сессии? Как изменить настройки, чтобы сессии хранились в базе? Где их лучше хранить?

2.Что значит Воссоздавать сессию? что изменится, если этот пункт включить?

3.По умолчанию Сессия администратора 14400с (4 часа). Меня из админки выкидывает через 15 минут, какое  бы время не стояло. с чем это может быть связано?

Спасибо

Ссылка на сообщение
Поделиться на другие сайты

1. В /includes/configure.php и /admin/includes/configure.php, в самом низу константа STORE_SESSIONS, что б был в базе, нужно в этой константе указать mysql.

2. Не знаю, что значит, я с этой опцией не разбирался особо. Ничего страшного не будет в любом случае, вне зависимости, включено или нет.

3. Видимо, с настройками сервера связано, наверное только хостера просить менять значение.

Ссылка на сообщение
Поделиться на другие сайты
  • 1 month later...

По умолчанию Сессия администратора 14400с (4 часа). Меня из админки выкидывает через 15 минут, какое  бы время не стояло. с чем это может быть связано?

Поставил хранить сессии в базе, тогда продолжительность сессии стала соответствовать времени в настройках.

Появился другой вопрос:

время жизни куки - до закрытия браузера. Что изменить в коде, чтобы при открытии браузера сессия рестартовала?

Т.е. нужно, если Посетитель положил товар в корзину, то завтра из этой корзины ничего не исчезнет.

Ссылка на сообщение
Поделиться на другие сайты

3.По умолчанию Сессия администратора 14400с (4 часа). Меня из админки выкидывает через 15 минут, какое  бы время не стояло. с чем это может быть связано?

Плюсадин. Реально бесит, что параметр не работает. Выкидывает через 15 минут.

Ссылка на сообщение
Поделиться на другие сайты

Плюсадин. Реально бесит, что параметр не работает. Выкидывает через 15 минут.

я же пишу, что работает, если сессии хранить в базе, а не в файлах. Нужно чтобы не выкидывало при закрытии браузера.

Ссылка на сообщение
Поделиться на другие сайты

kolodkin

По умолчанию вроде такого нет, т.е. что б содержимое корзины постоянно сохранялось и как сделать я не знаю.

Ссылка на сообщение
Поделиться на другие сайты

Для зарегеных пользователей содержимое корзины сохраняется. Для незарегеных сбрасывается.

Ага, но я говорю про сессии. Т.е. завтра открыв браузер и зайдя в магазин, зарегистрированный пользователь должен быть залогинен (если он не нажал выход конечно). Вот как на этом форуме, один раз залогинился и он тебя помнит.

Ссылка на сообщение
Поделиться на другие сайты

Это уже не сессия, а куки. Сессия живет только до закрытия браузера, куки живут столько, сколько в них прописано.

Должна быть какая-то настройка. Сейчас у меня в куках сайта магазина только cookie_test: please_accept_for_session и айди сессии.

Вообще, обычно в магазинах делают так, что вроде бы он тебя помнит, но при оформлении товара и изменении настроек все равно спрашивает пароль, чтобы кто попало не купил чего-нибудь под твоим аккаунтом. Так на амазоне, например. А в простеньких магазинчиках вообще никогда не видел, чтобы сохранялись куки.

Ссылка на сообщение
Поделиться на другие сайты

вот нашел, только не знаю правильно или нет

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, говорят что это не очень правильно, нужно чтобы авторизация шла через куки, а не сессия хранилась.

Кто как думает?

Ссылка на сообщение
Поделиться на другие сайты

Насколько я понимаю, главная опасность тут в том, что, если у пользователя стырят куки session id, то кто угодно сможет под ним залогиниться.

Ссылка на сообщение
Поделиться на другие сайты
  • 5 years later...

Ряд вопросов:

1.При установке магазина есть пункт - Сессии сохранять в базе или файлах. Как сейчас узнать, где хранятся сессии? Как изменить настройки, чтобы сессии хранились в базе? Где их лучше хранить?

2.Что значит Воссоздавать сессию? что изменится, если этот пункт включить?

3.По умолчанию Сессия администратора 14400с (4 часа). Меня из админки выкидывает через 15 минут, какое  бы время не стояло. с чем это может быть связано?

Спасибо

 

Хотелось бы поднять вопрос. 

 

Действительно непонятно совершенно, что делает опция "воссоздавать сессию". Администрация/тех.поддержка движка Vamshop, поработайте, пожалуйста!

 

Лично, могу ответить по 2-м пунктам:

 

1. Сессии могут хранится или в базе данных или на веб-сервере. Разница в том, что работать с сессиями (читать/менять/искать) удобнее используя СУБД. Но в хранении на веб-сервере есть свои преимущества - скорость работы выше за счет того, что не нужно слать постоянно запросы в СУБД и запись идет на ПЗУ (сразу на винчестеры минуя СУБД), а это иногда быстрее, особенно, если СУБД удаленная. Ну, а где хранить, как было замечено выше, регулируется параметром STORE_SESSION в конфигурационном файле движка.

 

3. Это может быть связано с настройкой интерпретатора php. а конкретно с директивой session.gc_maxlifetime. И я думаю, вы уже догадались, почему при изменении типа хранилища (с php на mysql) у вас заработала настройка время жизни сессии.

Ссылка на сообщение
Поделиться на другие сайты

Что делает эта опция можно посмотреть в /inc/vam_session_recreate.inc.php

И, соотственно, в файлах, где используется, например в login.php, checkout.php, create_account.php

Ссылка на сообщение
Поделиться на другие сайты

Так я вообще отвечаю, раз этот вопрос был в теме, может кому полезно будет.

Может кто через год, два, три, попадёт в эту тему из поисковиков или ещё как.

Ссылка на сообщение
Поделиться на другие сайты

ну, а я говорю, что пользы от этого поста не очень много. 

 

ладно... дойдут руки - разберусь и отпишусь. на данный момент есть кучу гипотез нужно проверять. 

Ссылка на сообщение
Поделиться на другие сайты
  • 1 month later...

Всё.. логинится по 100 раз на день просто зае Дошли руки наконец-то :)

 

Поехали.

 

2 Support:

Начну с того, что такого файла как вы сказали (/inc/vam_session_recreate.inc.php), скорее всего не существует.

 

пруф 1 (скачанный только что демо-дистрибутив, версия 1.72)

PoZkrN7.png

 

пруф 2 (find . -name vam_session_recreate.inc.php)

gQJctLW.png

 

2 all:

Теперь, что касается функции (далее сокр. ф.) "Воссоздать сессию".

 

для начала найдем ее (grep -ir "recreate" . -C 6 --color=auto):

xZKc4KA.png

называется она vam_session_recreate();

находится в двух файлах:

$ grep -lir -E "function\s+vam_session_recreate()" .
./admin/includes/functions/sessions.php
./includes/functions/sessions.php

Теперь листинг самой функции:

GHZIHnj.png

 

То есть, ф. Воссоздать сессию занимается тем, что разрушает текущую сессию, перед этим записав её данные в память, и создает новую с теми данными, которые были. 

Короче, создает заново такую же сессию. Единственно, что из-за этого изменится так это идентификатор этой сессии.

Теперь становится более понятным описание к этой функции:

Воссоздавать сессию для генерации нового ID кода сессии при входе зарегистрированного покупателя в магазин, либо при регистрации нового покупателя

 

Для чего нужно?

 

Источник: http://forums.oscommerce.com/topic/317530-disadvantages-to-recreate-sessions-true/

 

Даю примерный перевод (подправьте, плиз, кто лучше знает инглиш):

 

Со слов знатока, мы узнали, что данная опция защищает нас от несанкционированного использования сессий. 

 

Но как именно это защищает?

 

Давайте рассмотрим наглядно ситуацию без включенной опции "воссоздать сессию".

1. Вы админ, зашли к себе на сайт (ваш браузер и сайт установили сеанс посетителя, создав для вас сессию);

2. Не дремлющий злоумышленник крадёт (по сути копирует) вашу сессию себе на компьютер;

3. Вы, проходите авторизацию и получаете права администратора;

4. Злоумышленник используя вашу сессию тоже получает права администратора;

 

Вариант с включенной опцией "воссоздать сессию".

1. Вы админ, зашли к себе на сайт (ваш браузер и сайт установили сеанс посетителя, создав для вас сессию "А");

2. Не дремлющий злоумышленник крадёт (по сути копирует) вашу сессию "А" себе на компьютер;

3. Вы, проходите авторизацию и получаете права администратора;

4. Сайт удаляет сессию "А" и создаёт сессию "Б" для вас;

5. Злоумышленник пытается использовать вашу сессию "А", но она больше не котируется сайтом;

6. Злоумышленник ворует сессию авторизованного администратора "Б"; 

 

Лично я не вижу смысла делать пересоздание сессии только после авторизации. Возможно данную конструкцию заложили как фундамент, чтобы в будущем её развивать, если понадобится. Потому что с общей идеей я согласен. Мы зашли на сайт - с правами "А". Прошли авторизацию - получили права "Б" или "В". Новые полномочия - новая сессия/сеанс. Логично и вроде бы мудро.

 

 

Продолжение следует...

 

 

Ссылка на сообщение
Поделиться на другие сайты
  • 2 weeks later...

В прошлом сообщении я обозревал функцию "Воссоздать сессию". Было написано много букав, по этому изложу резюме:

ф. Воссоздать сессию занимается тем, что генерирует новый идентификатор сессии для пользователя при авторизации/регистрации. Для того чтобы предотвратить несанкционированное использование сессии. С точки зрения безопасности системы вещь нужная, но в той реализации в какой она сейчас есть вещь практически бесполезная, 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;
    } 

Тут важно понимать для чего разделили время жизни сессии одминов и юзверей. Для не просвещенных, объясню. Так, как администратор является привилегированным пользователем, который может много чего, то разумно было бы усилить контроль доступа к таким привилегиям. И это достигается за счет уменьшения времени сеанса администратора. То есть, простыми словами, ставим для админов сессию по-меньше, чтобы те почаще вводили свой пароль, для того чтобы минимизировать риск несанкционированного доступа под их именем. 

 

 

Продолжение следует...

Ссылка на сообщение
Поделиться на другие сайты

одного не могу понять.

суть всех этих изобретений велосипеда в том, чтобы когда пользователь вернулся на сайт - его корзина не была пуста?

 

если да, то не проще в куки id товара записывать и по возвращении восстанавливать в корзине эти товары? м?

 

единственное, в чем тут виден плюс (это Я про операции, описанные 

MaZa

 это то, что не получится теоретически того, что пока пользователь не залогинен - одни товары в корзине, залогинился - другие)

Ссылка на сообщение
Поделиться на другие сайты

одного не могу понять.

суть всех этих изобретений велосипеда в том, чтобы когда пользователь вернулся на сайт - его корзина не была пуста?

это не изобретения вовсе, а необходимый функционал для полноценной работы системы...

 

все эти настройки сессий регулируют... ползунок) мой вот где)

 

безопасность<[( + )]===============>производительность

 

т.е. если мы делаем удобно и безопасно от этого страдает сервер, потому что он сильнее напрягается, потому что начинает хранить больше и обрабатывать больше сессий :)

 

 

 

Выходит, что просто незачем писать в куки какую либо инфу кроме айди сессии, т.к. вся инфа уже есть в сессии. 

 

Ещё раз повторюсь, я не описывал операции. Я обозревал функционал движка раздела Сессии. т.к. мне было необходимо разобраться в этом. А также я решил поделится с теми, кому тоже интересно разобраться, но в лом колупаться. :3

 

Ссылка на сообщение
Поделиться на другие сайты

та нет. Я согласен штука нужная и интересная. Вопрос в том, не принесет ли она проблем на 5ю точку и не будет ли в магазине за раз 500 админом под 1 аккаунтом сидеть и жизнь портить

Ссылка на сообщение
Поделиться на другие сайты

ну, у меня всё чики-пики) проблемы на 5-ю точку голова безмозглая всегда приносит, а не настройка сессий :D

p.s.: я планирую в эту тему ещё написать заключительное сообщение, где я все подытожу и напишу как сделать запоминание на долго и почему.

Ссылка на сообщение
Поделиться на другие сайты

ну, у меня всё чики-пики) проблемы на 5-ю точку голова безмозглая всегда приносит, а не настройка сессий :D

p.s.: я планирую в эту тему ещё написать заключительное сообщение, где я все подытожу и напишу как сделать запоминание на долго и почему.

 

вот это было бы здорово.

Ссылка на сообщение
Поделиться на другие сайты

MaZa

 

Может это всё как-то в раздел FAQ перенести отдельным сообщением, что б тема на форуме не потерялась!?

Ссылка на сообщение
Поделиться на другие сайты

Ребята, тут мне по работе пришлось ещё разобраться с тем, как наш движок определяет откуда пришли по $_SERVER['HTTP_REFERER'].. там целый модуль есть, который этим занимается. он ещё и историю просмотра страниц ведет. Эта вся информация, которую движок собрал и обработал тоже хранится в Сессии. Понимание того, какие данные хранятся в сессиях, которые мы настраиваем, тоже было бы весьма полезно, имхо.

Вообщем, потерпите, мне нужно с этим вопросом разобраться и тогда я закончу статью по сессиям и там дальше будет видно что и как в ЧаВо переносить.

Ссылка на сообщение
Поделиться на другие сайты
×
×
  • Создать...