为什么joomla 2.5会话表损坏了?

时间:2013-09-20 06:07:49

标签: mysql database joomla joomla2.5

我使用Joomla运营网站! 2.5.9共7个月。直到本周,一切都很顺利。在星期一和今天(星期五),由于****_session表被分解,网站无法运行。我没有机会看看有关错误的日志。

无论如何,我周一修好了桌子,直到今天一切正常。今天它重复了同样的错误。然后我又修好了。我不希望桌子被破坏,也不想再修复它。

我想知道Joomla是否存在漏洞!或者服务器端还有其他东西。

3 个答案:

答案 0 :(得分:3)

出于某种原因,我有时会收到此错误,因此我使用cron作业自动修复了一个问题:

<?php

$sites = array('http://www.yoursite.com', 'http://www.yourothersite.com');
foreach($sites as $site) {
  $content = file_get_contents($site);
  if (strpos($content, 'error') !== false) {
    mail('myself@myself.com', 'Error found: '.$site,
         $site.' reported an error:<br/><br/>'.$content,
         'From: Myself <myself@myself.com>');
  }
  if (strpos($content, 'jtablesession::Store Failed') !== false) {
    // run repair table
    $con = mysql_connect('localhost', 'user', 'pass');
    mysql_select_db('yoursite_db_name', $con);
    // you might want to add an if here, if you have many sites to check
    mysql_query('REPAIR TABLE `yourprefix_session`', $con);
    mysql_close($con);
    mail('myself@myself.com', 'Repaired #__session', 'From: Myself <myself@myself.com>');
  }
}

?>

请记住,我仅将此用于Joomla 1.5网站。如果2.5或3.0不同,您可能希望更改搜索到的错误。

答案 1 :(得分:3)

我制作了一个页面,可以在崩溃时手动修复表格。

<?php
    //file = repair/index.php

    include '../configuration.php'; //has JConfig class

    $cfg = new JConfig();

    $mysqli = new mysqli($cfg->host, $cfg->user, $cfg->password, $cfg->db);

    if($mysqli->query('REPAIR TABLE prefix_session'))
        echo 'Hey!';
    else
        echo 'An error occured call zkanoca';
?>

当我致电http://example.com/repair时,没关系。

答案 2 :(得分:2)

我还在MySQL中丢失了一个损坏的“会话”表的站点。我发现的解决方案对于一个非常简单和可预测的问题来说太复杂了,如下所述:

https://www.akeebabackup.com/documentation/admin-tools/database-tools.html

简单地说,会话表需要定期清理。一旦崩溃,就无法再使用PHPmyAdmin访问它(因为表崩溃了,无法访问它)。由于表已损坏,并且由于无法访问该站点,因此您也无法访问管理工具。

所以,通过cpanel,使用PHPmyAdmin,在数据库部分,在网站数据库的SQL选项卡中,我输入:

REPAIR TABLE [prefix]_session

然后点击开始

问题解决了。网站重新出现。