user3049418
user3049418

Reputation: 1

Works on localhost but not on web server....session_start(): Cannot send session cache limiter - headers already sent

I am a newbie to PHP and have tried everything and also tried the forum threads to try and fix this but after a week - I feel I am no nearer.

The localhost version works fine - no problem. However, when I upload it, it presents me with the following messsage:

session_start(): Cannot send session cache limiter - headers already sent (output started at /home/idigital123/public_html/index.php:2) in /home/idigital123/public_html/index.php on line 41

Here is the code:

<?php require_once('Connections/idigitalconn.php'); ?> 
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }
  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

mysql_select_db($database_idigitalconn, $idigitalconn);
$query_Recordset1 = "SELECT login.username, login.password FROM login";
$Recordset1 = mysql_query($query_Recordset1, $idigitalconn) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
?>
<?php
// *** Validate request to login to this site.
if (!isset($_SESSION)) {
  session_start();
}
$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
  $_SESSION['PrevUrl'] = $_GET['accesscheck'];
}

if (isset($_POST['username'])) {
  $loginUsername=$_POST['username'];
  $password=$_POST['password'];
  $MM_fldUserAuthorization = "";
  $MM_redirectLoginSuccess = "header/KS3Yr7.html";
  $MM_redirectLoginFailed = "index.php";
  $MM_redirecttoReferrer = false;
  mysql_select_db($database_idigitalconn, $idigitalconn);

  $LoginRS__query=sprintf("SELECT username, password FROM login WHERE username=%s AND password=%s",
    GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text")); 

  $LoginRS = mysql_query($LoginRS__query, $idigitalconn) or die(mysql_error());
  $loginFoundUser = mysql_num_rows($LoginRS);
  if ($loginFoundUser) {
     $loginStrGroup = "";

    if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}
    //declare two session variables and assign them
    $_SESSION['MM_Username'] = $loginUsername;
    $_SESSION['MM_UserGroup'] = $loginStrGroup;       

    if (isset($_SESSION['PrevUrl']) && false) {
      $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];  
    }
    header("Location: " . $MM_redirectLoginSuccess );
  }
  else   {
    header("Location: ". $MM_redirectLoginFailed );
  }
}
?>

Upvotes: 0

Views: 864

Answers (4)

Esse
Esse

Reputation: 3298

Linux uses \n as line endings. However your file is using \r\n (windows line endings). When sending data from server to your browser, some data is sended because of bad line endings. You can see it in editor with white characters display: enter image description here

Change it to unix style and everything should work fine.

Upvotes: 0

What you need to check is:

if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

Instead of:

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

Also put it on top of your code as @Jay explained.

EDIT: In this part you need an absolute URL (as explained in documentaton: http://php.net/manual/es/function.header.php)

header("Location: " . $file);

So change it to (or the way you want the absolute path):

header("Location: http://" . $_SERVER["HTTP_HOST"] . "/" . $file);

Upvotes: 2

ad4s
ad4s

Reputation: 304

By the way make sure You don't have BOM (Byte Order Mark) attached to source files. It causes unwanted character appearing at the begining of the output.

Upvotes: 0

Jay Blanchard
Jay Blanchard

Reputation: 34426

session_start() must go at the top of all of your PHP pages and not tested. Checking to see if a session variable is set before starting the session is "backwards".

Please, don't use mysql_* functions, They are no longer maintained and are officially deprecated. Learn about prepared statements instead, and use PDO or MySQLi. This article will help you decide.

Upvotes: 0

Related Questions