Vägrar redirecta efter setcookie (PHP)

Permalänk
Medlem

Vägrar redirecta efter setcookie (PHP)

Tjena!

Jag har nyss börjat lära mig om cookies, och därav har jag stött på problem som jag inte kan lösa. Jag har googlat runt, testat olika lösningar men nej. Inget vill fungera.

Citat:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<?php
$user = $_GET("user");
$loggedin = $_GET("loggedin");

header("refresh: 5; url=index_full.php");
//Set dem cookies
setcookie("user", $user, time()+3600, '/');
setcookie("loggedin", $loggedin, time()+3600, '/');
exit();

?>
<html>
<head>
<title>Testing da users</title>
<link href="mall.css" rel="stylesheet" type="text/css">
</head>
<body>

</body>
</html>

Jag har testat allting. Från början hade jag header(location: index_full.php); under setcookie, men det vägrade fungera. Trots att det fungerar hur bra som helst i alla andra filer jag har. Vad gör jag fel? Jag har även testat att redirecta med javascript, fungarar inte heller. Blir så less.

Tack på förhand!

Permalänk
Medlem

Header måste komma innan utskrift annars blir det fel
Alltså i ditt fall innan doctype
Med utskrift menad allt som syns i htmln

Permalänk
Medlem
Skrivet av tsarraz:

Header måste komma innan utskrift annars blir det fel
Alltså i ditt fall innan doctype
Med utskrift menad allt som syns i htmln

Detta har jag också läst, men jag brukar alltid använda header mitt i koden i vanliga fall och då fungerar det alltid utmärkt. Varför fungerar den inte nu?

Citat:

$loggedin = 0;
$user=$_POST['username'];
$pw=$_POST['pw'];

$password = md5($pw);

$swag=mysql_query("SELECT * from table_users WHERE name='$user' AND password='$password'");

if (mysql_num_rows($swag) != 0) {
echo "Account was found, and password is right. Logging yo as in.";
$loggedin = 1;
header("location:logincms_check.php?loggedin=1&user=" .$user);
}else{
echo "Something is wrong.";
}

?>

Till exempel där, där är headern mitt i men den redirectar ändå precis som den ska.

Permalänk
Medlem

Just nu flyttar du din header innan setcookie sets

Permalänk
Medlem

ob_start();

Skickades från m.sweclockers.com

Visa signatur

Citera för svar

Permalänk
Skrivet av Logfan:

Detta har jag också läst, men jag brukar alltid använda header mitt i koden i vanliga fall och då fungerar det alltid utmärkt. Varför fungerar den inte nu?

Till exempel där, där är headern mitt i men den redirectar ändå precis som den ska.

Först och främst HTTP meddelande har två delar; en Header och en Body. Först skickas headern och där finns URL:en, kakor, komprimerings inställningar, språk osv. Sedan kommer bodyn och det är den som innehåller själva sidans innehåll eller form-data. När du använder header(); session_start(); eller i detta fallet setcookie(); så skrivs det till headern. Men om bodyn redan har börjat skickas kan du inte ändra dina headers.

Dock kan man använda sig av http://php.net/manual/en/book.outcontrol.php för att sätta ingång buffern. Anledningen till att du ibland kan skicka headers efter att du skickat din body är på grund utav att PHP har en inställning för hur mycket den ska buffra:

; Output buffering allows you to send header lines (including cookies) even ; after you send body content, at the price of slowing PHP's output layer a ; bit. You can enable output buffering during runtime by calling the output ; buffering functions. You can also enable output buffering for all files by ; setting this directive to On. If you wish to limit the size of the buffer ; to a certain size - you can use a maximum number of bytes instead of 'On', as ; a value for this directive (e.g., output_buffering=4096). output_buffering = 4096

(Saxat från: http://www.wallpaperama.com/forums/php-how-to-enable-output-b...)

Om du då skickar ut mer än 4096 byte (fråga mig inte om även headers räknas, det vet jag inte ) så kommer du inte kunna ändra din header efter att du skickat delar av bodyn.

Om jag hade varit dig hade jag satt output_buffering till Off. Och skickat mina headers innan bodyn helt enkelt. Om i fall att du i framtiden ska byta webhotell och de visar sig ha det avstängt, eller som nu.