Добрый день!
Столкнулся с тем, что один и тот же пользователь может залогиниться на сайте дважды — один раз зайдя через example.net, а второй — через www.example.net. В результате в списке залогиненных имеются, например, сразу два ingumsky. Хочу от этого избавиться (либо сделать автоматический редирект с example.net на www.example.net, либо сделать единый логин для обоих вариантов обращения к домену), но не знаю даже, как сформулировать запрос к гуглу, чтобы найти решение этой «проблемы». Подскажите, плиз, что нужно сделать. Спасибо!
Комментарии
Для перенаправления можно немного подправить .htaccess. В нем самом всё написано, вот по русски:
# (http://example.com/… будет перенаправлен на http://www.example.com/…)
# измените и расскоментируйте следующие строчки:
# RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
# RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
Источник: http://setegnom.com/node/282
Берем файл user.module и находим код, выводящий список всех, кто онлайн. Выдираем этот кусок кода, создаем в админке новый блок с форматом ввода PHP. Вставляем туда скопированный код с внесенными нами незначительными изменениями (см. строки с $items[$account->uid])
:
// Count users active within the defined period.
$interval = time() - variable_get('user_block_seconds_online', 900);
// Perform database queries to gather online user lists. We use s.timestamp
// rather than u.access because it is much faster.
$anonymous_count = sess_count($interval);
$authenticated_users = db_query('SELECT DISTINCT u.uid, u.name, s.timestamp FROM {users} u INNER JOIN {sessions} s ON u.uid = s.uid WHERE s.timestamp >= %d AND s.uid > 0 ORDER BY s.timestamp DESC', $interval);
$authenticated_count = 0;
$max_users = variable_get('user_block_max_list_count', 10);
$items = array();
while ($account = db_fetch_object($authenticated_users)) {
if (!isset($items[$account->uid])) { ///<<< доп. условие
if ($max_users > 0) {
$items[$account->uid] = $account; /// <<< было $items[], стало $items[$account->uid]
$max_users--;
}
$authenticated_count++;
}
}
// Format the output with proper grammar.
if ($anonymous_count == 1 && $authenticated_count == 1) {
$output = t('There is currently %members and %visitors online.', array('%members' => format_plural($authenticated_count, '1 user', 'count users'), '%visitors' => format_plural($anonymous_count, '1 guest', 'count guests')));
}
else {
$output = t('There are currently %members and %visitors online.', array('%members' => format_plural($authenticated_count, '1 user', 'count users'), '%visitors' => format_plural($anonymous_count, '1 guest', 'count guests')));
}
// Display a list of currently online users.
$max_users = variable_get('user_block_max_list_count', 10);
if ($authenticated_count && $max_users) {
$output .= theme('user_list', $items, t('Online users'));
}
$block['subject'] = t('Who\'s online');
$block['content'] = $output;
}
Стандартный друпаловский блок не забываем отключить. Всё это как вариант на скорую руку. Другой путь - сделать полностью свой блок с более простым/коротким кодом, взяв за основу запрос db_query('SELECT DISTINCT u.uid, u.name, s.timestamp FROM {users} u INNER JOIN {sessions} s ON u.uid = s.uid WHERE s.timestamp >= %d AND s.uid > 0 ORDER BY s.timestamp DESC', $interval);
Прежде чем делать редирект - проверьте что проиндексировано поисковиками.
Для них поддомен - отдельный сайт.
Если проиндексировано что-то одно - сначала нужно склеить домены, а затем уж ставить редирект.
Спасибо всем откликнувшимся!
vikeng
Как-то упустил я этот пункт на сетегноме. Спасибо!
kosilko
Ага. Это такое косметическое решение -) Но всё равно спасибо. Блок у меня используется из числа сниппетов, найденных на drupal.ru, так что думаю, я воспользуюсь Вашим советом и подкорректирую свой SELECT.
VladSavitsky
В моём конкретном случае думаю, что можно без проблем делать редирект, так как сайт пока находится в закрытой разработке, и поисковики на него не заглядывают. Но другим Ваш совет может пригодиться. Спасибо Вам!
Найдите в вашем settings.php строку вида
и приведите ее к виду
Проблема должна разрешиться.
Химический Али
Большое спасибо! Буду вносить правки.