不是电子邮件 PHPSESSID

Not email PHPSESSID

我的客户下订单后,我使用以下代码发送电子邮件确认,但我想防止 PHPSESSID 包含在该电子邮件中:

$body = "";
  foreach ($_REQUEST as $Field=>$Value) { 
    if($Value != ''){
     $body .= "$Field: $Value\n\n";
     }
  }

在 PHP 文件的顶部,我有以下关于 SESSION id

<?php session_start(); ?>
<?php if (!isset($_SESSION['id'])) : ?>

不知何故,这必须创建一个 PHPSESSID 字段,其值由我的 $body 代码获取。

生成的电子邮件输出如下所示:

_fname: Mark
_lname: Smith
_Address_1: South St
_Phone: 123-456-7890
_email: my@email.com
_Date_Needed: 4/19/17
B1: Submit
PHPSESSID: (some string of characters)

有趣的是,B1 提交和 PHPSESSID 不是我使用的变量,但代码正在查找这些值并返回它们。 B1 提交令人恼火,但我认为 PHPSESSID 可能存在安全风险。

我正在使用 $_REQUEST 从用户那里获取表单数据,如下所示:

$_fname=$_REQUEST['_fname'];
$_lname=$_REQUEST['_lname'];
$_Address_1=$_REQUEST['_Address_1'];

也许我应该将其从 $_REQUEST 更改为 $_GET,然后在电子邮件创建中也使用 $_GET?

问题可能在于使用 $_REQUEST 而不是 $_POST 或 $_GET,具体取决于您的 form/header 行为。也就是说,我猜想因为您使用的是 $_REQUEST,所以您没有对发送的数据进行任何清理。这可能会导致您的邮件系统被垃圾邮件发送者劫持,从而导致被添加到反垃圾邮件黑名单中。您可能希望阅读有关正确保护邮件系统的内容,或使用涵盖这些问题的第 3 方库。

会话 ID 正在生成或 regenerated/resumed session_start();

如果您的表单正在获取 POST 数据,则只需将其更改为:

foreach ($_POST as $Field=>$Value) { 
    if($Value != ''){
        $body .= "$Field: $Value\n\n";
     }
}

如果它使用的是 GET 数据,请将其更改为 $_GET 而不是 $_POST

您的提交听起来像是一个带有值的输入。

您可以使用提交类型为无值的按钮。

这是一个示例,其中按钮不会显示在输出中:

旁注:我在这里使用了 POST 方法。如果这样还不能解决问题,我就干脆删了。

<?php 

$body = "";
  foreach ($_REQUEST as $Field=>$Value) { 
    if($Value != ''){

     $body .= "$Field: $Value\n\n";

     // ...

     }
  }

?>

<form method="post">

    abc1: 
    <input name="abc1" value="abc1a" type="text">
    <br>

    abc2: 
    <input name="abc2" value="abc2a" type="text">
    <br>

    abc3: 
    <input name="abc3" value="abc3a" type="text">
    <br>

    abc4: 
    <button name="abc4" type="submit">SUBMIT</button>

</form>