Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP - Set cookie and redirect

Tags:

php

cookies

I am trying to set a cookie and redirect. Using Debian GNU/Linux 6.0 (64 bit) with PHP 5.3.3-7+squeeze19 with Suhosin-Patch (cli) (built: Feb 17 2014 10:10:23) and Apache/2.2.16 (Debian).

For some reason this works:

<?php
    $cookie_name = $_GET['a'];
    $cookie_value = $_GET['b'];
    setcookie($_GET['a'], $_GET['b'], time() + (86400 * 30), "/"); // 86400 = 1 day
?>

But this does not:

<?php
    $cookie_name = $_GET['a'];
    $cookie_value = $_GET['b'];
    setcookie($_GET['a'], $_GET['b'], time() + (86400 * 30), "/"); // 86400 = 1 day
    header("Location: http://www.example.com");
    exit;
?>

Even after several page loads. I've tried adding error reporting to the top of my code, but I don't see any errors when I load the page nor in the Apache log (/var/log/apache2/error.log):

    error_reporting(E_ALL);ini_set('display_errors','1');

For some reason whenever I redirect, even using javascript as below, a cookie will not add.

<?php
    $cookie_name = $_GET['a'];
    $cookie_value = $_GET['b'];
    setcookie($_GET['a'], $_GET['b'], time() + (86400 * 30), "/"); // 86400 = 1 day
?>
<!DOCTYPE HTML>
<html lang="en-US">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="refresh" content="1;url=http://www.example.com">
        <script type="text/javascript">
            window.location.href = "http://www.example.com"
        </script>
        <title>Page Redirection</title>
    </head>
    <body>
        If you are not redirected, follow <a href='http://www.example.com'>this link</a>!
    </body>
</html>

Why does the first example work but not the others?

like image 992
Mark Avatar asked Dec 05 '25 09:12

Mark


1 Answers

Use include rather than redirect

This also saves the Browser a round trip HTTP request

<?php
    $cookie_name = $_GET['a'];
    $cookie_value = $_GET['b'];
    setcookie($_GET['a'], $_GET['b'], time() + (86400 * 30), "/"); // 86400 = 1 day
    include('/home/user/public_html/index.html');
    exit;
?>

While I prefer include over a redirect header, your cookie should work. I have tested and it works just like it should.

In my test I redirected to another domain. The cookie is set in the domain where the PHP script resides.

setcookie('test', 'test', time() + (86400 * 30), "/");
header("Location: http://www.intel.com");

Works just like it is supposed to:

enter image description here

like image 177
Misunderstood Avatar answered Dec 09 '25 19:12

Misunderstood



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!