Who's Online Enhanced
- tessthepup
- Certified Developer
- Posts: 382
- Joined: Mon Mar 01, 2021 5:55 pm
- Phoenix Version:
- Has thanked: 47 times
- Been thanked: 62 times
Re: Who's Online Enhanced
@radhavallabh
I have tested the who's online with Firefox, Chrome, Edge and Opera browsers and it works perfectly.
I can only presume there is something already in your store that is conflicting.
Does your browser console report anything?
I have tested the who's online with Firefox, Chrome, Edge and Opera browsers and it works perfectly.
I can only presume there is something already in your store that is conflicting.
Does your browser console report anything?
-
radhavallabh
- Senior Contributor
- Posts: 466
- Joined: Tue Oct 27, 2020 4:09 am
- Phoenix Version: 1.1.0.6
- Has thanked: 29 times
- Been thanked: 3 times
Re: Who's Online Enhanced
I use php 7.4, Well the visitors are almost 500 to 400 (many are bots) generally;tessthepup wrote: ↑Fri Dec 05, 2025 7:00 pm @radhavallabh
I have tested the who's online with Firefox, Chrome, Edge and Opera browsers and it works perfectly.
I can only presume there is something already in your store that is conflicting.
Does your browser console report anything?
After trying loading it today I get Failed error in Browser console after 4 minutes....
Secure Connection Failed
The connection to www.xx.com was interrupted while the page was loading.
The page you are trying to view cannot be shown because the authenticity of the received data could not be verified.
Please contact the website owners to inform them of this problem.
Rest all pages load well and fast.
Hope I could get this wonderful addon working dear;
Thank you in advance;
Warm Regds.
radhavallabh
-
azpro
- Contributor
- Posts: 177
- Joined: Fri Nov 06, 2020 8:25 am
- Phoenix Version: v1.1.0.6
- Has thanked: 30 times
- Been thanked: 34 times
Re: Who's Online Enhanced
.. I would think that is a bigger issue that needs to be resolved first.500 to 400 (many are bots)
We also had the issue of lots of bots (actually probably more leechers/spiders for AI-LLM etc) which gave all kinds of negative results (loading time of pages). We started with Cloudflare to have better control on incoming traffic and this worked out quite nicely.
Please note - I am not an expert - just what I "think" might be a solution.
-
radhavallabh
- Senior Contributor
- Posts: 466
- Joined: Tue Oct 27, 2020 4:09 am
- Phoenix Version: 1.1.0.6
- Has thanked: 29 times
- Been thanked: 3 times
Re: Who's Online Enhanced
Hi;
I use the Sitelock CDN actually for that...
The normal whos online loaded normally actually with no issues..
Just wanted this beautiful addon to work out too...
Very Warm Regds.
radhavallabh
I use the Sitelock CDN actually for that...
The normal whos online loaded normally actually with no issues..
Just wanted this beautiful addon to work out too...
Very Warm Regds.
radhavallabh
-
MyGamesShop
- Contributor
- Posts: 131
- Joined: Wed Mar 10, 2021 3:02 am
- Phoenix Version: v1.1.0.6
- Has thanked: 8 times
- Been thanked: 5 times
Re: Who's Online Enhanced
The download link as @ 03.03.26
When I extract this file in Ubuntu Linux the file permissions do not allow to delete or rename as a user.
Very odd permissions, is there a reason for this?
Which required the use of sudo to remove or change.
When I extract this file in Ubuntu Linux the file permissions do not allow to delete or rename as a user.
Very odd permissions, is there a reason for this?
Which required the use of sudo to remove or change.
sudo rm -rf "Who's Online Enhanced"
You do not have the required permissions to view the files attached to this post.
- tessthepup
- Certified Developer
- Posts: 382
- Joined: Mon Mar 01, 2021 5:55 pm
- Phoenix Version:
- Has thanked: 47 times
- Been thanked: 62 times
Re: Who's Online Enhanced
@MyGamesShop I wish I could give you a reason but I do not use Ubuntu Linux so have no idea, sorryMyGamesShop wrote: ↑Mon Mar 02, 2026 11:31 pm The download link as @ 03.03.26
When I extract this file in Ubuntu Linux the file permissions do not allow to delete or rename as a user.
Very odd permissions, is there a reason for this?
Which required the use of sudo to remove or change.sudo rm -rf "Who's Online Enhanced"
Re: Who's Online Enhanced
Just wanted to ask if this addon could be updated so that the top labels (customers, bots, guests) are clickable so that the list is filtered per type of online entities.
It would be nice to have filtered categories especially when the list is large (more than 2-3 pages).
Thank you in advance.,
It would be nice to have filtered categories especially when the list is large (more than 2-3 pages).
Thank you in advance.,
- tessthepup
- Certified Developer
- Posts: 382
- Joined: Mon Mar 01, 2021 5:55 pm
- Phoenix Version:
- Has thanked: 47 times
- Been thanked: 62 times
Re: Who's Online Enhanced
@gritsop
Hi, I have updated the code to include a filter system.gritsop wrote: ↑Sun May 03, 2026 8:31 pm Just wanted to ask if this addon could be updated so that the top labels (customers, bots, guests) are clickable so that the list is filtered per type of online entities.
It would be nice to have filtered categories especially when the list is large (more than 2-3 pages).
Thank you in advance.,
You do not have the required permissions to view the files attached to this post.
-
PiLLaO
- Contributor
- Posts: 107
- Joined: Thu Nov 05, 2020 9:28 pm
- Phoenix Version: v1.1.0.6
- Has thanked: 53 times
- Been thanked: 11 times
Re: Who's Online Enhanced
In case it's of any use, this is part of the old osCommerce Who's Online add-on that I used to use to show guest cart
Code: Select all
function unserializesession($data) {
$vars = preg_split(
'/([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\|/',
$data,-1,PREG_SPLIT_NO_EMPTY |
PREG_SPLIT_DELIM_CAPTURE
);
for($i=0; $vars[$i]; $i++) {
$result[$vars[$i++]]=unserialize($vars[$i]);
}
return $result;
}
if (isset($info)) {
$heading[] = array('text' => '<strong>' . TABLE_HEADING_SHOPPING_CART . '</strong>');
// First we check if the session exist in a file, else we will use mysql
if ( (file_exists(tep_session_save_path() . '/sess_' . $info)) && (filesize(tep_session_save_path() . '/sess_' . $info) > 0) ) {
$session_data = file(tep_session_save_path() . '/sess_' . $info);
$session_data = trim(implode('', $session_data));
} else {
$session_data = tep_db_query("select value from sessions WHERE sesskey = '" . $info . "'");
$session_data = tep_db_fetch_array($session_data);
$session_data = trim($session_data['value']);
}
if ($length = strlen($session_data)) {
if (PHP_VERSION < 4) {
$start_cart = strpos($session_data, 'cart[==]o');
$start_currency = strpos($session_data, 'currency[==]s');
} else {
$start_cart = strpos($session_data, 'cart|O');
$start_currency = strpos($session_data, 'currency|s');
}
// if we found the 'cart' tag in the session data
// workaround for timeout when suhosin session data encryption is in effect
if ($start_cart !== false) {
for ($i=$start_cart; $i<$length; $i++) {
if ($session_data[$i] == '{') {
if (isset($tag)) {
$tag++;
} else {
$tag = 1;
}
} elseif ($session_data[$i] == '}') {
$tag--;
} elseif ( (isset($tag)) && ($tag < 1) ) {
break;
}
}
$session_data_cart = substr($session_data, $start_cart, $i);
$session_data_currency = substr($session_data, $start_currency, (strpos($session_data, ';', $start_currency) - $start_currency + 1));
/*
session_decode($session_data_cart);
session_decode($session_data_currency);
if (PHP_VERSION < 4) {
$broken_cart = $cart;
$cart = new shoppingCart;
$cart->unserialize($broken_cart);
} else {
$cart = $_SESSION['cart'];
$currency = $_SESSION['currency'];
}
*/
$session_data_id = unserializesession($session_data_id);
$session_data_currency = unserializesession($session_data_currency);
$session_data_country = unserializesession($session_data_country);
$session_data_zone = unserializesession($session_data_zone);
$session_data_cart = unserializesession($session_data_cart);
// Finalement, on restaure la session du Panier ($_SESSION['cart']) pour le consulter:
// Sans cela, $_SESSION['cart'] resterait vide.
// Et donc on n'aurait plus la possibilité de voir le contenu du panier des utilisateurs.
$_SESSION['currency'] = $session_data_currency;
$_SESSION['cart'] = $session_data_cart;
/*
if (is_object($cart)) {
$products = $cart->get_products();
for ($i = 0, $n = sizeof($products); $i < $n; $i++) {
$contents[] = array('text' => $products[$i]['quantity'] . ' x ' . $products[$i]['name']);
}
if (sizeof($products) > 0) {
$contents[] = array('text' => tep_draw_separator('pixel_black.gif', '100%', '1'));
$contents[] = array('align' => 'right', 'text' => TEXT_SHOPPING_CART_SUBTOTAL . ' ' . $currencies->format($cart->show_total(), true, $currency));
*/
if (is_object($_SESSION['cart']['cart'])) {
$products = $_SESSION['cart']['cart']->get_products();
foreach ($products as $key => $row) {
$attributes[$key] = $row['attributes'];
$name[$key] = $row['name'];
}
array_multisort(array_map('strtolower',$name), $attributes, SORT_ASC, $products, SORT_ASC);
for ($i=0, $n=sizeof($products); $i<$n; $i++) {
// Push all attributes information in an array
if (isset($products[$i]['attributes']) && is_array($products[$i]['attributes'])) {
foreach ($products[$i]['attributes'] as $option => $value) {
$attributes = tep_db_query("select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix
from products_options popt, products_options_values poval, products_attributes pa
where pa.products_id = '" . (int)$products[$i]['id'] . "'
and pa.options_id = '" . (int)$option . "'
and pa.options_id = popt.products_options_id
and pa.options_values_id = '" . (int)$value . "'
and pa.options_values_id = poval.products_options_values_id
and popt.language_id = '" . (int)$languages_id . "'
and poval.language_id = '" . (int)$languages_id . "'");
$attributes_values = tep_db_fetch_array($attributes);
$products[$i][$option]['products_options_name'] = $attributes_values['products_options_name'];
$products[$i][$option]['options_values_id'] = $value;
$products[$i][$option]['products_options_values_name'] = $attributes_values['products_options_values_name'];
$products[$i][$option]['options_values_price'] = $attributes_values['options_values_price'];
$products[$i][$option]['price_prefix'] = $attributes_values['price_prefix'];
}
}
}
for ($i = 0, $n = sizeof($products); $i < $n; $i++) {
$products_complete = $products[$i]['quantity'] . ' x ' . $products[$i]['name'];
if (isset($products[$i]['attributes']) && is_array($products[$i]['attributes'])) {
foreach($products[$i]['attributes'] as $option => $value) {
$products_complete .= '<br /> <small><i> - ' . $products[$i][$option]['products_options_name'] . ' ' . $products[$i][$option]['products_options_values_name'] . '</i></small>';
}
}
$contents[] = array('text' => $products_complete);
}
if (sizeof($products) > 0) {
$contents[] = array('text' => tep_draw_separator('pixel_black.gif', '100%', '1'));
$contents[] = array('align' => 'right', 'text' => TEXT_SHOPPING_CART_SUBTOTAL . ' ' . $currencies->format($_SESSION['cart']['cart']->show_total(), true, $_SESSION['currency']['currency']));
} else {
$contents[] = array('text' => '<i>' . TEXT_EMPTY . '</i>');
}
}
}
}- tessthepup
- Certified Developer
- Posts: 382
- Joined: Mon Mar 01, 2021 5:55 pm
- Phoenix Version:
- Has thanked: 47 times
- Been thanked: 62 times
Re: Who's Online Enhanced
@PiLLaO
Thank you. I will see what I can do
Thank you. I will see what I can do
PiLLaO wrote: ↑Tue May 05, 2026 3:21 pm In case it's of any use, this is part of the old osCommerce Who's Online add-on that I used to use to show guest cart
Code: Select all
function unserializesession($data) { $vars = preg_split( '/([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\|/', $data,-1,PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE ); for($i=0; $vars[$i]; $i++) { $result[$vars[$i++]]=unserialize($vars[$i]); } return $result; } if (isset($info)) { $heading[] = array('text' => '<strong>' . TABLE_HEADING_SHOPPING_CART . '</strong>'); // First we check if the session exist in a file, else we will use mysql if ( (file_exists(tep_session_save_path() . '/sess_' . $info)) && (filesize(tep_session_save_path() . '/sess_' . $info) > 0) ) { $session_data = file(tep_session_save_path() . '/sess_' . $info); $session_data = trim(implode('', $session_data)); } else { $session_data = tep_db_query("select value from sessions WHERE sesskey = '" . $info . "'"); $session_data = tep_db_fetch_array($session_data); $session_data = trim($session_data['value']); } if ($length = strlen($session_data)) { if (PHP_VERSION < 4) { $start_cart = strpos($session_data, 'cart[==]o'); $start_currency = strpos($session_data, 'currency[==]s'); } else { $start_cart = strpos($session_data, 'cart|O'); $start_currency = strpos($session_data, 'currency|s'); } // if we found the 'cart' tag in the session data // workaround for timeout when suhosin session data encryption is in effect if ($start_cart !== false) { for ($i=$start_cart; $i<$length; $i++) { if ($session_data[$i] == '{') { if (isset($tag)) { $tag++; } else { $tag = 1; } } elseif ($session_data[$i] == '}') { $tag--; } elseif ( (isset($tag)) && ($tag < 1) ) { break; } } $session_data_cart = substr($session_data, $start_cart, $i); $session_data_currency = substr($session_data, $start_currency, (strpos($session_data, ';', $start_currency) - $start_currency + 1)); /* session_decode($session_data_cart); session_decode($session_data_currency); if (PHP_VERSION < 4) { $broken_cart = $cart; $cart = new shoppingCart; $cart->unserialize($broken_cart); } else { $cart = $_SESSION['cart']; $currency = $_SESSION['currency']; } */ $session_data_id = unserializesession($session_data_id); $session_data_currency = unserializesession($session_data_currency); $session_data_country = unserializesession($session_data_country); $session_data_zone = unserializesession($session_data_zone); $session_data_cart = unserializesession($session_data_cart); // Finalement, on restaure la session du Panier ($_SESSION['cart']) pour le consulter: // Sans cela, $_SESSION['cart'] resterait vide. // Et donc on n'aurait plus la possibilité de voir le contenu du panier des utilisateurs. $_SESSION['currency'] = $session_data_currency; $_SESSION['cart'] = $session_data_cart; /* if (is_object($cart)) { $products = $cart->get_products(); for ($i = 0, $n = sizeof($products); $i < $n; $i++) { $contents[] = array('text' => $products[$i]['quantity'] . ' x ' . $products[$i]['name']); } if (sizeof($products) > 0) { $contents[] = array('text' => tep_draw_separator('pixel_black.gif', '100%', '1')); $contents[] = array('align' => 'right', 'text' => TEXT_SHOPPING_CART_SUBTOTAL . ' ' . $currencies->format($cart->show_total(), true, $currency)); */ if (is_object($_SESSION['cart']['cart'])) { $products = $_SESSION['cart']['cart']->get_products(); foreach ($products as $key => $row) { $attributes[$key] = $row['attributes']; $name[$key] = $row['name']; } array_multisort(array_map('strtolower',$name), $attributes, SORT_ASC, $products, SORT_ASC); for ($i=0, $n=sizeof($products); $i<$n; $i++) { // Push all attributes information in an array if (isset($products[$i]['attributes']) && is_array($products[$i]['attributes'])) { foreach ($products[$i]['attributes'] as $option => $value) { $attributes = tep_db_query("select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix from products_options popt, products_options_values poval, products_attributes pa where pa.products_id = '" . (int)$products[$i]['id'] . "' and pa.options_id = '" . (int)$option . "' and pa.options_id = popt.products_options_id and pa.options_values_id = '" . (int)$value . "' and pa.options_values_id = poval.products_options_values_id and popt.language_id = '" . (int)$languages_id . "' and poval.language_id = '" . (int)$languages_id . "'"); $attributes_values = tep_db_fetch_array($attributes); $products[$i][$option]['products_options_name'] = $attributes_values['products_options_name']; $products[$i][$option]['options_values_id'] = $value; $products[$i][$option]['products_options_values_name'] = $attributes_values['products_options_values_name']; $products[$i][$option]['options_values_price'] = $attributes_values['options_values_price']; $products[$i][$option]['price_prefix'] = $attributes_values['price_prefix']; } } } for ($i = 0, $n = sizeof($products); $i < $n; $i++) { $products_complete = $products[$i]['quantity'] . ' x ' . $products[$i]['name']; if (isset($products[$i]['attributes']) && is_array($products[$i]['attributes'])) { foreach($products[$i]['attributes'] as $option => $value) { $products_complete .= '<br /> <small><i> - ' . $products[$i][$option]['products_options_name'] . ' ' . $products[$i][$option]['products_options_values_name'] . '</i></small>'; } } $contents[] = array('text' => $products_complete); } if (sizeof($products) > 0) { $contents[] = array('text' => tep_draw_separator('pixel_black.gif', '100%', '1')); $contents[] = array('align' => 'right', 'text' => TEXT_SHOPPING_CART_SUBTOTAL . ' ' . $currencies->format($_SESSION['cart']['cart']->show_total(), true, $_SESSION['currency']['currency'])); } else { $contents[] = array('text' => '<i>' . TEXT_EMPTY . '</i>'); } } } }