Настройка cookie пользователю средствами PHP

1
2
3
4
5
6
Первый и второй аргумент функции, name и value передается непосредсвенно функией SetCookie. Третий аргумент может иметь одно из следующий значений:
 
аргумент не указан (или ноль), куки будут установленны для текущей сессии, и будут не действительны после закрытия браузера;
положительное число. Количество дней;
аргумент начинается с буквы 'f' (forever), куки будут установленны на всегда;
аргумент начинается с буквы 'r' (remove), установленный куки будут удалены.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
function put_cookie($name, $value, $days=0)
{
    $cookie_host = preg_replace('|^www\.(.*)$|', '.\\1', $_SERVER['HTTP_HOST']);
  
    if (substr(strval($days), 0, 1) == 'f')
        $exp = 2147483640;
    else if (substr(strval($days), 0, 1) == 'r')
    {
        $exp = 1; $value = '';
    }
    else if ($days != 0)
        $exp = time() + intval($days)*86400;
    else
        $exp = 0;
  
    setcookie($name, $value, $exp, '/', $cookie_host);
}
?>
code: #php
<?php
error_reporting(E_ALL); // high level of error reporting
  
// copy-paste function ae_put_cookie here from above
  
if (strtolower($_SERVER['REQUEST_METHOD']) == 'post')
{
    if (isset($_POST['notepad']))
    {
        $days = isset($_POST['days'])?$_POST['days']:'';
        put_cookie('notepad', $_POST['notepad'], $days);
        header("Location: http://{$_SERVER['HTTP_HOST']}{$_SERVER['PHP_SELF']}");
    }
}
  
?>
<html><head><title>CookieNotepad</title></head>
<body>
<?php
if (!isset($_COOKIE['notepad']))
    echo "<b>Cookie for notepad is not set</b><br>";
?>
  
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
Text:<br>
<textarea rows="10" cols="60" name="notepad">
<?php
if (isset($_COOKIE['notepad']))
{
    // escape HTML tags and entities
    $s = str_replace('&', '&amp;', $_COOKIE['notepad']);
    $s = str_replace('<', '&lt;', $s);
    $s = str_replace('>', '&gt;', $s);
    echo $s;
}
?></textarea>
<br>
Third argument for put_cookie:<br>
<input type="text" name="days" size="10"><br>
(empty - session cookie, 'f' - forever, 'r' - remove, integer &gt; 0 - number of days in future)
<br><br>
<input type="submit" value="create/save">
</form>
</body>
</html>