【问题标题】:why does joomla 2.5 session table corrupt?为什么 joomla 2.5 会话表损坏?
【发布时间】:2013-09-25 10:31:42
【问题描述】:

我正在使用 Joomla! 运行一个网站! 2.5.9 7 个月。直到本周一切都很好。周一和今天(周五)网站无法运行,因为****_session 表已损坏。我没有机会查看有关错误的日志。

不管怎样,我周一修好了桌子,直到今天一切正常。今天它重复了同样的错误。然后我又修了。我不想桌子坏了,也不想再修了。

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

【问题讨论】:

  • 您运行的是最新版本的 Joomla 2.5 系列 (2.5.14) 吗?您最近是否安装了任何扩展或编辑了任何核心 Joomla 文件?
  • @Lodder Joomla 版本是 2.5.9。我已经安装/编辑/更新了六个月。
  • 你落后了 5 个版本。尝试升级到最新版本。可能是您的网站已被黑客入侵。阅读以下内容:stackoverflow.com/questions/11036763/…
  • 您的会话表中有多少条记录?您是否考虑过截断它或至少删除所有记录?您唯一的影响是任何已登录的用户都必须重新登录(我有一个包含数千行的表

标签: mysql database joomla joomla2.5


【解决方案1】:

出于某种原因,我有时会收到此错误,因此我使用 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 搜索的错误不同,您可能需要更改它们。

【讨论】:

  • 是的,我们也这么认为。我还创建了repair.php,当网站崩溃时运行一次。那么就可以了。
  • 将其添加到 cron 作业中,您将获得自动修复,以避免停机。 :)
  • 在任何人发布关于将我的 Joomla 1.5 网站升级到 2.5 或 3.0 的帖子之前,请查看 extensions.joomla.org 中的生成器元标记以获得有趣的发现 :)
  • mysql_* 已弃用。你应该使用mysqli
  • 我发布的脚本在 PHP 5.2 上为 Joomla 1.5 运行,但感谢您发现 Lodder。
【解决方案2】:

我做了一个页面,当崩溃时手动修复表。

<?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 时就可以了。

【讨论】:

  • 调用 Özkan 时发生错误。你真的被这个系统捆绑了,不是吗:)
【解决方案3】:

我还因 MySQL 中损坏的“会话”表而丢失了一个站点。对于一个非常简单且可预测的问题,我找到的解决方案都太复杂了,如下所述:

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

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

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

REPAIR TABLE [prefix]_session

然后点击开始

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

【讨论】:

    猜你喜欢
    • 2015-03-14
    • 2014-11-23
    • 2019-10-23
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    相关资源
    最近更新 更多