Отключение пользовательских сессий для гостя - PullRequest
5 голосов
/ 24 мая 2010

Можно ли отключить обработку сессий в Joomla 1.5 для гостей?

Я не использую пользовательскую систему во внешнем интерфейсе, я предположил, что не нужно выполнять запросы, как показано ниже:

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

DELETE FROM jos_session WHERE ( time < '1274709357' )

SELECT *  FROM jos_session WHERE session_id = '70c247cde8dcc4dad1ce111991772475'

UPDATE `jos_session` SET `time`='1274710257',`userid`='0',`usertype`='',`username`='',`gid`='0',`guest`='1',`client_id`='0',`data`='__default|a:8:{s:15:\"session.counter\";i:5;s:19:\"session.timer.start\";i:1274709740;s:18:\"session.timer.last\";i:1274709749;s:17:\"session.timer.now\";i:1274709754;s:22:\"session.client.browser\";s:88:\"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3\";s:8:\"registry\";O:9:\"JRegistry\":3:{s:17:\"_defaultNameSpace\";s:7:\"session\";s:9:\"_registry\";a:1:{s:7:\"session\";a:1:{s:4:\"data\";O:8:\"stdClass\":0:{}}}s:7:\"_errors\";a:0:{}}s:4:\"user\";O:5:\"JUser\":19:{s:2:\"id\";i:0;s:4:\"name\";N;s:8:\"username\";N;s:5:\"email\";N;s:8:\"password\";N;s:14:\"password_clear\";s:0:\"\";s:8:\"usertype\";N;s:5:\"block\";N;s:9:\"sendEmail\";i:0;s:3:\"gid\";i:0;s:12:\"registerDate\";N;s:13:\"lastvisitDate\";N;s:10:\"activation\";N;s:6:\"params\";N;s:3:\"aid\";i:0;s:5:\"guest\";i:1;s:7:\"_params\";O:10:\"JParameter\":7:{s:4:\"_raw\";s:0:\"\";s:4:\"_xml\";N;s:9:\"_elements\";a:0:{}s:12:\"_elementPath\";a:1:{i:0;s:74:\"C:\\xampp\\htdocs\\sites\\iv.mynet.com\\libraries\\joomla\\html\\parameter\\element\";}s:17:\"_defaultNameSpace\";s:8:\"_default\";s:9:\"_registry\";a:1:{s:8:\"_default\";a:1:{s:4:\"data\";O:8:\"stdClass\":0:{}}}s:7:\"_errors\";a:0:{}}s:9:\"_errorMsg\";N;s:7:\"_errors\";a:0:{}}s:13:\"session.token\";s:32:\"a2b19c7baf223ad5fd2d5503e18ed323\";}'

  WHERE session_id='70c247cde8dcc4dad1ce111991772475'

Ответы [ 3 ]

4 голосов
/ 21 августа 2010

Я, вероятно, узнал ответ:

Вы можете добавить второй аргумент в строку в /index.php

/**
* CREATE THE APPLICATION
*
* NOTE :
*/
$mainframe =& JFactory::getApplication('site');

изменить эту строку как;

$mainframe =& JFactory::getApplication('site',array('session'=>false));

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

3 голосов
/ 18 августа 2010

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

Решение (Не очень приятно, но работает)

Я заменил функцию вставки (библиотеки / joomla / database / table / session.php)

с

 function insert($sessionId, $clientId) {

 $url = 'http://'.$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];

 $this->session_id  = $sessionId;

 $this->client_id   = $clientId;

 $this->time = time();

 if ($this->guest!=1 || stristr($url,'/administrator'))
      $ret = $this->_db->insertObject( $this->_tbl, $this, 'session_id' );

 if( !$ret && $this->guest!=1) {
      $this->setError(strtolower(get_class( $this ))."::". JText::_( 'store failed' ) ."<br />" . $this->_db->stderr());
      return false;
 } 
 else {
      return true;
 }
 }
0 голосов
/ 24 мая 2010

Joomla по умолчанию отслеживает данные сеанса в таблице jos_session, как я вижу, вы выяснили. Однако вы можете легко отключить это, зайдя в админ-панель - Глобальная конфигурация - Система - Параметры сеанса и изменив обработчик сеанса с «база данных» на «Нет».

...