Whenever i run session in server than it show this problem

Warning: session_start(): Cannot send session cache limiter - headers already sent

so pls help me

this is simple login prog when user enter into nxt page it name will show i want to store its name in session

i m giving full code wht i m using if thr is anything wrong pls tell me :sad: :sad: :sad: :sad: :sad: :sad: :sad: :sad: :sad: :sad:

<? @session_start();?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0046)http://acmserver.cs.ucr.edu/~nkumar/vision.htm -->
<HTML>
<HEAD><TITLE>Bankon Us</TITLE>
<META http-equiv=Content-Type content="text/html; charset=utf-8">

<link rel="stylesheet" href="style.css" type="text/css">
<body topmargin="0" leftmargin="0">
<table width="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
<TD align=center>
<table cellpadding="0" cellspacing="0" border=0 width="100%">
<tr><td height="25">&nbsp;</td></tr>
<tr>
<td width="50%" align="right">
<?php
$_SESSION= $_POST;
$_SESSION= $_POST;
$_SESSION=$_POST;
if (($_SESSION == "peter") and ($_SESSION == "gewant") and ($_SESSION == "approvalagent"))
{
//header("Location:admin_page.php");
echo "<meta http-equiv='Refresh' content='0; url=admin_page.php'>";
exit;
}
$f_name= $_POST;
$l_name= $_POST;
$pass= $_POST;
if($_POST != "Login")
{
?>
<table border="0" cellpadding="5" cellspacing="3" width="80%" class="form-noindent">
<tr><td bgColor="#ff9900">
<form method="post" action="<?php $_SERVER?>">
<input type="hidden" name="agent" value="access">
<table border="0" width="100%">
<tr>
<td colspan="3" align="center" class="heading">Sign in with your<br> Account</td>
</tr>
<tr><td>&nbsp;</td></tr>
<tr>
<td>&nbsp;</td>
<td class="textform">First Name&nbsp;:</td>
<td class="forms" valign="top">
<input name="fname" class="cartForm" size=20 type="text"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td class="textform">Last Name&nbsp;:</td>
<input name="lname" class="cartForm" size=10 type="hidden">
<td class="forms" valign="top">
<input name="lname" class="cartForm" size=20 type="text"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td class="textform">Password&nbsp;:</td>
<td class="forms" valign="top">
<input class="cartForm" name="password" size=20 type="password"></td>
</tr>
<tr>
<td valign="top" colspan="3" align="center">&nbsp;&nbsp;
<input type="submit" name="submit" value="Login" class="cartForm" >
</td>
</tr>
<tr><td colspan="3">&nbsp;</td></tr>
<tr>
<td colspan="2" align="center"><div class="leo"><a href="forget.php">Forget Password</a></div></td>
<td align="center"><div class="leo"><a href="order.php">New user click here</a></div></td>
</tr>
</table>
</form>
</td></tr>
</table>
</td>
<td width="50%" align="center"><img src="images/online.jpg"></td>
</tr>
</table>
<br><br>
<?php }
elseif($f_name== "" or $l_name== "" or $pass== "")
{
?>
<table border="0" cellpadding="5" cellspacing="3" width="80%" class="form-noindent">
<tr><td bgcolor="#00CC99">
<form method="post" action="<?php $_SERVER ?>">
<input type="hidden" name="agent" value="access">
<table border="0" width="100%">
<tr>
<td colspan="3" align="center" class="heading">Sign in with your Account</td>
</tr>
<tr><td>&nbsp;</td></tr>
<tr><td colspan="3" align="center" class="heading">Please fill all the fields</td></tr>
<tr><td>&nbsp;</td></tr>
<tr>
<td>&nbsp;</td>
<td class="textform">First Name&nbsp;:</td>
<td class="forms" valign="top">
<input name="fname" class="cartForm" size=20 type="text"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td class="textform">Last Name&nbsp;:</td>
<input name="lname" class="cartForm" size=10 type="hidden">
<td class="forms" valign="top">
<input name="lname" class="cartForm" size=20 type="text"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td class="textform">Password&nbsp;:</td>
<td class="forms" valign="top">
<input class="cartForm" name="password" size=20 type="password"></td>
</tr>
<tr>
<td valign="top" colspan="3" align="center">&nbsp;&nbsp;
<input type="submit" name="submit" value="Login" class="cartForm" >
</td>
</tr>
<tr><td colspan="3">&nbsp;</td></tr>
<tr>
<td colspan="2" align="center"><div class="leo"><a href="forget.php">Forget Password</a></div></td>
<td align="center"><div class="leo"><a href="order.php">New user click here</a></div></td>
</tr>
</table>
</form>
</td></tr>
</table>
</td>
<td width="50%" align="center"><img src="images/login1.jpg" width="300" height="200"></td>
</tr>
</table>
<?php
}
else {
$query = "SELECT * from users WHERE firstname='$f_name' and lastname='$l_name' and password='$pass' ";
$result = mysql_query($query);
for ($i = 0; $i < mysql_num_rows($result); $i++)
{
$id = mysql_result($result, $i, "id");
$fname = mysql_result($result, $i, "firstname");
$lname = mysql_result($result, $i, "lastname");
$pas = mysql_result($result, $i, "password");
if (("$f_name" == "$fname") and ("$l_name" == "$lname") and ("$pass" == "$pas"))
{
$_SESSION = $f_name;
$_SESSION = $l_name;
echo "<meta http-equiv='Refresh' content='0; url=user_page.php'>";
exit;
}//if loop
}//for loop
echo "<meta http-equiv='Refresh' content='0; url=new_user.php'>";
//header("Location:new_user.php");
exit;
}
?>
</td>
</tr>
</table>
</BODY>
</HTML>

Recommended Answers

All 22 Replies

Headers already sent refers to HTTP Headers.
The server cannot send any more http headers if the HTTP Content has started sending.
In PHP code, this means you have ouput something to the page with echo or print etc.

PHP will not output any whitespace in between php tags, However, for anything outside php tags, (eg: html) whitespaces, linebreaks are sent as HTTP Content.
Sometimes this your editor may add whitespace also.

To prevent whitespace from being sent before you send all your headers, make sure the <?php is right at the top of the php script, and there are no lines or white space in between.

You can also use output buffering, ob_start() to buffer your PHP output before sending it to HTTP. Then use ob_flush() to send http output when you need.
see: http://www.php.net/manual/en/function.ob-start.php

I noticed you have //header("Location:admin_page.php"); in your page. You can use the output buffering to allow you to send this header even after you have echo and html output in your php.

You have blank lines in your HTML code, remove them and try again.

Works fine for me. Attached is the code I copied and pasted, so you have at least a file that worked.

My test was done with EasyPHP, with the PHP version upgraded to 5.04.

commented: very thanks +0

Pass the header before any HTML tags or else it would show errors

Use This Php Script at top of the your php page this script start session before dowload include file i hope you will solve this problem.
<URL SNIPPED>

<?php 
if (!isset($_SESSION)) {
  session_start();
}
?>

this error will occur at the times of:

1.any space is there before the session_start(); function..Means it sholu be the first line of your application...
2.dont use session_start(); as twice (in your main application and in your included application)

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/leadtwot/public_html/staging/contact_us.php:1) in /home/leadtwot/public_html/staging/contact_us.php on line 1

hey dude
are you sure you dont use include code?
session code must be before include

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/leadtwot/public_html/staging/contact_us.php:1) in /home/leadtwot/public_html/staging/contact_us.php on line 1

I have this problem too. I tried everything without success.
After long research i found the reason and decision in this place.
I hope that's help you and save your time.

Headers already sent refers to HTTP Headers.
The server cannot send any more http headers if the HTTP Content has started sending.
In PHP code, this means you have ouput something to the page with echo or print etc.

PHP will not output any whitespace in between php tags, However, for anything outside php tags, (eg: html) whitespaces, linebreaks are sent as HTTP Content.
Sometimes this your editor may add whitespace also.

To prevent whitespace from being sent before you send all your headers, make sure the <?php is right at the top of the php script, and there are no lines or white space in between.

You can also use output buffering, ob_start() to buffer your PHP output before sending it to HTTP. Then use ob_flush() to send http output when you need.
see: http://www.php.net/manual/en/function.ob-start.php

I noticed you have //header("Location:admin_page.php"); in your page. You can use the output buffering to allow you to send this header even after you have echo and html output in your php.

Thank You for Solution.....

I had the same problem until went to my file manager and checked what was in my file on the server. there I found garbage added to the start of the file - in my case a dash was added:
sample.php
line 1:-<?php etc.
I get 3 extra chars on my Virtual server, and it happens with 3 ftp clients I have used so far. (I'm using Windows 7 OS).

thanks to solve my error

please you continues your good work for other issue

session_start() must be at the first line of the page.
Should not contain any spaces before it.

Thanks...a lot to all of u ...its help me a lot..
thanks once again..

Yeah Thanxxx.. i done it. there are a single space in code..
after half hour strugle i had done. :-)

To solve this problem, you do the following:
Step 1: Download and install nodepad + + latest version.
Step 2: open the php file that you run corrupted by nodepad + +. select tab: encoding -> encoding in UTF-8 without BOM.
Then you run the program is ok.

commented: Thanks a lot. It worked. Already wasted 3 days +0

To fix the session_start() problem, change the line in your PHP config file for sessions and change it to maybe C:\PHP\PHPSession after having created the folder of course and restart your server and try checking your page again.

xoso888.vn Thank you :D Works for me :)

Check White spaces
Check PHP Closing tags properly closed or not
Check Permissions 766

I tried above all solutions. finally I Changed output_buffering in PHP.ini (GODaddy Server)

output_buffering = on

In PHP 5.4 version by defult output_buffering has no value
I updated the PHP version 5.4 to 5.6 and in 5.6 version by defult it has value 4096
Now it's working fine

commented: Necroposting -3

thanks for sharing this article..

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.