[Joomla] How to fix a corrupt Joomla session table “jos_session”

[Joomla] How to fix a corrupt Joomla session table “jos_session”

What is Joomla session table and why do we need it?

As the name implies, jos_session table stores temporary data of Joomla users and it is used to manage user sessions. A loaded session table can have a serious impact on your Joomla site and often cause slow down. Joomla updates the session table on every page view and it is, in fact, the most active table (write-wise) on a Joomla website

Common reasons for this issue
The most common cause of a corrupt table is a failed write. Joomla is not very good at handling sessions efficiently. So, the same user can have multiple session entries in the database.

  • When the server runs out of resources [OR]
  • If the Joomla website is managed on an underpowered server’s or VPS and they occasionally crash under high load. There is a possibility that Joomla session table “jos_session” table becomes corrupt and shows this error while browsing websites

++++===============
jtablesession::Store Failed
DB function failed with error number 1146
Table 'dbname.jos_session' doesn't exist SQL=INSERT INTO `jos_session`(
`session_id`,`time`,`username`,`gid`,`guest`,`client_id` ) VALUES (
'rAxRWo70lP8aQOwtokou4IRsMZ','2444128272','','0','1','0' )
===============++++

By default, these corrupted tables can’t be repaired with MySQL check. And how could one resolve this?

Here is the simple fix to resolve this issue:

  • Need to backup whole database using mysqldump
  • Get in to DB access via phpMyAdmin/Command line 
  • Drop the corrupted table “jos_session table” 
  • Create the new table named as “jos_session table” and the paste the below query

+++===============
CREATE TABLE IF NOT EXISTS `jwq7m_session` (
`username` varchar(150) default '',
`time` varchar(14) default '',
`session_id` varchar(200) NOT NULL default '0',
`guest` tinyint(4) default '1',
`userid` int(11) default '0',
`usertype` varchar(50) default '',
`gid` tinyint(3) unsigned NOT NULL default '0',
`client_id` tinyint(3) unsigned NOT NULL default '0',
`data` longtext, PRIMARY KEY (`session_id`(64)),
KEY `whosonline` (`guest`,`usertype`),
KEY `userid` (`userid`),
KEY `time` (`time`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
===============+++

The above query will recreate the table structure and allow Joomla users to write their session files.

Also, sometimes there are chances that you get a crash notification like the error below

++++===============
Table 'dbname.jos_session' is marked as crashed and should be repaired
SQL=INSERT INTO `jos_session` (`session_id`,`time`,`client_id` ) VALUES (
'rAxRWo70lP8aQOwtokou4IRsMZ','2444128272','0' )
===============++++