【问题标题】:How can heavy traffic cause "The session id is too long or contains illegal characters"大流量如何导致“会话ID过长或包含非法字符”
【发布时间】:2014-12-11 01:22:31
【问题描述】:

在我的 HostGator 共享主机网站上,几天前我开始在流量繁忙期间收到错误 500(当天访问量为 249 次,点击量为 148,429 次,页面数为 141,829,带宽为 723.01 MB - 许多人都在访问 MySQL 查询。而在共享主机上,HostGator 当时只允许 25 个运行进程)。流量一减少,错误就消失了。

但是当我访问那个时间和那一天的错误日志时,发现我写了很多次:

[12-Oct-2014 16:37:16] PHP Warning:  session_start() [<a href='function.session-start'>function.session-start</a>]: The session id is too long or contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in /home/amalthea/public_html/tkq/q0.php on line 2
[12-Oct-2014 16:37:16] PHP Warning:  session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cookie - headers already sent by (output started at /home/amalthea/public_html/tkq/q0.php:2) in /home/amalthea/public_html/tkq/q0.php on line 2
[12-Oct-2014 16:37:16] PHP Warning:  session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cache limiter - headers already sent (output started at /home/amalthea/public_html/tkq/q0.php:2) in /home/amalthea/public_html/tkq/q0.php on line 2
[12-Oct-2014 16:37:16] PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/amalthea/public_html/tkq/q0.php:2) in /home/amalthea/public_html/tkq/user.cookies.php on line 5

我不明白的是,“会话ID太长或包含非法字符”的错误是如何由于流量大而引起的?大流量与会话 ID 字符有什么关系?

目前,该网站运行良好。我还访问了this Question on Stackoverflow,但它没有解释错误,它只是提供了一个解决方法。请解释为什么我只有在交通繁忙的情况下才会出现错误。我想确保我的代码是正确的。

以下是我的所有 PHP 页面在网站上的启动方式:

<?php
session_start();
require_once("user.cookies.php");

$username = $_SESSION["SESS_USERNAME"];
$id= $_SESSION["SESS_USERID"];

这里是 user.cookies.php

<?php

//redirect function
function returnheader($location){
    $returnheader = header("location: $location");
    return $returnheader;
}

if(!strlen($_SESSION["SESS_USERNAME"]) ){

    //redirect
    returnheader("login.php");
}

?>

【问题讨论】:

  • 如果您手动进入 cookie 并将会话 id 设置为某个荒谬的长值,是否会发生同样的错误?可能有人只是在跟你开玩笑或试图强迫错误吗?
  • 检查 $_COOKIE 并在遇到这些错误时查看会话 ID/值的设置。
  • @MarcB,目前,cookie 变量值正常。如何获取前几天的cookie变量值?
  • @KevinB,我不认为有人会和我开玩笑来强迫错误。你是什​​么意思手动进入cookies?而我最初的问题是,网页上错误 500 的原因(在这种情况下,进程限制为 25)是否会导致错误日志中出现此会话 id 错误?
  • 对于您最初的问题,我对此表示怀疑。就 cookie 而言,爬虫当然有可能故意强制 500 错误,例如知道您网站上的 500 错误是什么样子,以便可以正确忽略其他 500 错误。恶意用户(或爬虫)也可能试图查看有关您的服务器的调试信息以找到弱点。

标签: php mysql session cookies error-log


【解决方案1】:

正如question中提到的那样

(...) 将您链接到生成的会话 ID 的 cookie 是 客户端。如果该 cookie 更改为无效格式(有人 试图利用某些东西)PHP会注意到它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 2020-05-23
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 2013-08-14
    相关资源
    最近更新 更多