使用带有头重定向的session_start

时间:2012-09-28 17:34:18

标签: php header session-variables

用户填写第1页上的表单。表单通过POST提交到第2页。第2页使数据库插入,但需要插入存储在会话变量中的用户ID,所以我需要做一个会话启动来获取该会话变量,但这阻止我在最后使用头重定向来停止重新意见书。我不想在第1页上将用户ID设置为隐藏输入,因为这很容易欺骗。我显然做了一些不符合最佳实践的事情,我应该做些什么?

    <?php
@session_start();
require_once '../Classes/Communication.php';
require_once '../Classes/Communication_db.php';
$noteDate=$_POST["noteDate"];
$noteContact = $_POST["noteContact"];
$note= $_POST["note"];
$custID = $_POST["custID"];

$comm = new Communication();
$comm->setCustomerID($custID);
$comm->setCommunicationDate(date("Y-m-d", strtotime($noteDate)));
$comm->setCustomerContactID($noteContact);
$comm->setNotes($note);
$comm->setUserID($_SESSION["userID"]);

Communication_db::saveCommunication($comm);

header("Location: ./index.php?action=newCustomer",303);

?>

2 个答案:

答案 0 :(得分:6)

摆脱<?php标记之前的空格。该空格被发送出去,然后您无法拨打header()

此外,您可以在较早的位置调用session_start(或者库正在执行此操作)。你只能打电话一次。试试这个:

if (!isset($_SESSION)) {
   session_start();
}

答案 1 :(得分:1)

session_start不会阻止你设置任何标题,但是在标题声明之前吐出任何输出,即使这只是一个php警告或通知。摆脱@Ray注意到的空间,并修复在标题行之前可能产生任何类型输出的任何其他事情。