PHP setcookie() function sends an HTTP cookie to the client. A cookie is a variable sent to the browser by the server. Cookies are typically small text files that a server embeds on a user's computer. This cookie is sent each time the computer requests a page through the browser. The name of the cookie is specified as a variable of the same name. For example, if the cookie being sent is named "name", a variable named $user is automatically created containing the cookie's value.
The cookie must be assigned before any other output is sent. The function returns true if successful, false otherwise.
1 setcookie(name, value, expire, path, domain, secure)
•name required. Specifies the name of the cookie.
•value required. Specifies the value of the cookie.
•expire Optional. Specifies the validity period of the cookie.
•path optional. Specifies the server path for cookies.
•domain optional. Specifies the domain name for the cookie.
•secure Optional. Specifies whether cookies are transmitted over a secure HTTPS connection.
The value of the cookie named "user" can be accessed via $HTTP_COOKIE_VARS["user"] or $_COOKIE["user"]. When sending a cookie, the cookie value is automatically URL-encoded. URL decoding is done on reception. If you don't need this, you can use setrawcookie() instead.
Example, php setting and getting cookies
//Function prototype: int setcookie(string name,string value,int expire,string path,string domain,int secure)
echo($mycookie);
echo($HTTP_COOKIE_VARS['mycookie'] );
echo($_COOKIE['mycookie']);
Delete Cookies
(1) Call setcookie() with only name parameter;
(2) Set the expiration time to time() or time-1;
Suggested deletion method:
PHP provides a very useful function mktime().
You just need to pass to mktime() the hours, minutes, seconds, months, dates, and years you want to represent in order.
mktime() will return the total number of days since January 1, 1970. Number of seconds.
So if you need to simulate the Y2K problem:
How to get COOKIE expiration time
Note:
When sending a cookie, the cookie value is automatically URL-encoded. URL decoding is done on reception.
If you don’t need this, you can use setrawcookie() instead.
For example, cookie to save user login information
1. Database connection configuration page: connectvars.php
2. Login page: logIn.php
$error_msg = "";
//判断用户是否已经设置cookie,如果未设置$_COOKIE['user_id']时,执行以下代码
if(!isset($_COOKIE['user_id'])){
if(isset($_POST['submit'])){//判断用户是否提交登录表单,如果是则执行如下代码
$dbc = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
$user_username = mysqli_real_escape_string($dbc,trim($_POST['username']));
$user_password = mysqli_real_escape_string($dbc,trim($_POST['password']));
if(!empty($user_username)&&!empty($user_password)){
//MySql中的SHA()函数用于对字符串进行单向加密
$query = "SELECT user_id, username FROM mismatch_user WHERE username = '$user_username' AND "."password = SHA('$user_password')";
//用用户名和密码进行查询
$data = mysqli_query($dbc,$query);
//若查到的记录正好为一条,则设置COOKIE,同时进行页面重定向
if(mysqli_num_rows($data)==1){
$row = mysqli_fetch_array($data);
setcookie('user_id',$row['user_id']);
setcookie('username',$row['username']);
$home_url = 'loged.php';
header('Location: '.$home_url);
}else{//若查到的记录不对,则设置错误信息
$error_msg = 'Sorry, you must enter a valid username and password to log in.';
}
}else{
$error_msg = 'Sorry, you must enter a valid username and password to log in.';
}
}
}else{//如果用户已经登录,则直接跳转到已经登录页面
$home_url = 'loged.php';
header('Location: '.$home_url);
}
?>
'.$error_msg.'
';3、登入页面:loged.php
4、注销cookie页面:logOut.php(注销后重定向到lonIn.php)
最后总结三点,大家必须留意
1: 设置cookie时的注意事项
在同一个页面中设置cookie,实际上是按从后往前的顺序进行的.如果要先删除一个cookie,再写入一个cookie,则必须先写写入语句,再写删除语句.否则会出现错误.
2: setcookie举例
简单的: setcookie("mycookie","value_of_mycookie");
带失效时间的: setcookie("withExpire","Expire_in_1_hour",time()+3600);
什么都有的:setcookie("FullCookie","Full_cookie_value",time+3600,"/forum","www.jb51.net",1);
3: cookie的一些特点
cookie是面向路径的.缺省path属性时,WEB服务器页会自动传递当前路径给浏览器.指定路径会强制服务器使用设置的路径.
在一个目录页面里设的cookie在另一个目录的页面里是看不到的.