PDA

View Full Version : Cookie Problems



Lexar
12-01-2006, 01:36 AM
Howdy, I'm having some issues using cookies. I've identified the problematic line being in my login.php file, which is the action="POST" of my login form.



<?php
if(empty($_POST['name']) || empty($_POST['pass']))
{ ?>
<b>Fill All Details </b>
<?php exit;
}
else
{
//Colllect the details and validate
$time = time();
$name = $_POST['name'];
$pass =md5($_POST['pass']);
$check = 'ON';

$db = mysql_connect("-----", "-----","-----") or die(mysql_error());
mysql_select_db("-----",$db) or die(mysql_error());
$query = "select * from Customer where Username='$name' and Password='$pass'";
$sql = mysql_query($query) or die(mysql_error());
$count = mysql_num_rows($sql);

if ($count == 1)
{
$cookie_data = $name.'-'.$pass.'-'.$access;
if($check=='ON')
{

if(setcookie ("cookie_info",$cookie_data, $time+3600)==TRUE)
{
?> if check is on <?PHP
echo "Cookie SET".$cookie_data; ?>
<a href='logout.php'>Logout</a>

<? }
}
}
else
{
echo "Authentication Failed";
exit;
}//

}
?>


That's the entire file. I've found that the "if check is on" line will display if it's before the following if statment, but not inside of it.


if(setcookie ("cookie_info",$cookie_data, $time+3600)==TRUE)

Fou-Lu
12-01-2006, 03:11 AM
I don't understand the problem you are having, can you be more clear?
Sounds like this:


if(setcookie ("cookie_info",$cookie_data, $time+3600)==TRUE)
{
?> if check is on <?PHP
echo "Cookie SET".$cookie_data; ?>
<a href='logout.php'>Logout</a>

<? }

is never evaluated to true, is that correct?
As well, unless you have output buffering enabled in your php.ini, this code will never set a cookie correctly. This is because you have previous output to the browser, which you will need to capture either in a variable or by using output buffering in order to set the actual cookie.

Lexar
12-01-2006, 03:25 AM
Correct. The if statment is never evaluated to be true, and if I add an else statment to it, it will always run through the else. I've tried removing the output to the screen from above and still have the same issues.