我想不通为什么我收到这个会话错误...为什么我得到这个PHP session_start()错误?
警告:在session_start() [function.session启动]:不能发送 会话缓存限制器 - 头 已经发出(输出开始在 C:\网络服务器\ htdocs中\项目2 \实验室\形状的提交\的index.php:2) 在 C:\网络服务器\ htdocs中\项目2 \实验室\形状的提交\的index.php 第2行
据我所知这种情况只发生在我身边在session_start()函数被调用之前,某种输出到浏览器,在这种情况下,在调用之前没有任何东西被打印到屏幕上,甚至没有任何空白。任何想法,为什么我仍然会得到错误?
我发布了此演示的完整源代码,以便您可以看到我用来创建错误的确切内容。
<?php
session_start();
require('formkey.class.php');
$formKey = new formKey();
$error = 'No error';
//Is request?
if($_SERVER['REQUEST_METHOD'] == 'post')
{
//Validate the form key
if(!isset($_POST['form_key']) || !$formKey->validate())
{
//Form key is invalid, show an error
$error = 'Form key error!';
}
else
{
//Do the rest of your validation here
$error = 'No form key error!';
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<title>Securing forms with form keys</title>
</head>
<body>
<div><?php if($error) { echo($error); } ?>
<form action="" method="post">
<dl>
<?php $formKey->outputKey(); ?>
<dt><label for="username">Username:</label></dt>
<dd><input type="text" name="username" id="username" /></dd>
<dt><label for="username">Password:</label></dt>
<dd><input type="password" name="password" id="password" /></dd>
<dt></dt>
<dd><input type="submit" value="Submit" /></dd>
<dl>
</form>
</body>
</html>
类文件
<?php
class formKey
{
//Here we store the generated form key
private $formKey;
//Here we store the old form key
private $old_formKey;
//The constructor stores the form key (if one excists) in our class variable
function __construct()
{
//We need the previous key so we store it
if(isset($_SESSION['form_key']))
{
$this->old_formKey = $_SESSION['form_key'];
}
}
//Function to generate the form key
private function generateKey()
{
$ip = $_SERVER['REMOTE_ADDR'];
$uniqid = uniqid(mt_rand(), true);
return md5($ip . $uniqid);
}
//Function to output the form key
public function outputKey()
{
//Generate the key and store it inside the class
$this->formKey = $this->generateKey();
//Store the form key in the session
$_SESSION['form_key'] = $this->formKey;
//Output the form key
echo "<input type='hidden' name='form_key' id='form_key' value='".$this->formKey."' />";
}
//Function that validated the form key POST data
public function validate()
{
//We use the old formKey and not the new generated version
if($_POST['form_key'] == $this->old_formKey)
{
//The key is valid, return true.
return true;
}
else
{
//The key is invalid, return false.
return false;
}
}
}
?>
在解决这个问题上仍然没有运气,它似乎会影响我网站上尝试使用会话的每个文件。很奇怪,现在所有的工作现在都显示出这个错误。 – JasonDavis 2010-01-23 03:25:50
http://stackoverflow.com/questions/1183726/headers-already-sent-in-php的可能重复,http://stackoverflow.com/questions/1891969/php-headers-already-sent-error – outis 2010-05-05 00:28:10
@outis这不是重复的,因为在会话被称为错误之前,这不是简单的空白或OUTPUT。此外,这是近半年的 – JasonDavis 2010-05-09 00:35:58