PHP中级

PHP中会话处理之Cookie

此课程是收费课程,请先购买或加入会员后再访问。

[TOC]

Cookie是将资料存在用户浏览器的技术, 最常见的用法, 就是做多少天内免登陆.

但是由于Cookie存在用户的浏览器中, 所以比较不安全, 容易被伪造.

Cookie的设置

bool setcookie(string $name [,string $value [,int $expire [,string $path [,string $domain [,bool $secure]]]]])
参数 描述 示例
$name Cookie的识别名称,即key 使用$_COOKIE["cookiename"]调用
$value Cookie的,即value,可以为数值和字符串 echo $_COOKIE["cookiename"];
$expire Cookie的生命周期,是UNIX时间戳 time()+60*60*24*7, 即为一周后失效.不设置,在会话结束后立即失效.
$path Cookie的路径,只有指定路径能访问到 /为整个域名有效, /php/就只能在 /php/子目录内有效, 默认为设定Cookie的当前目录
$domain Cookie的有效域名 如果有子域名,也要生效,设为.whphp.com, 如果设为www.whphp.com, 那就只有这个域名可用.
$secure 是否通过https连接传送 设为true,仅可在https中使用, 默认为false.

例子
php
setcookie("username", "aaron", time()+60*60*24*7);
setcookie("username", "aaron", time()+60*60*24*7, "/test", "www.whphp.com", 1);

在PHP中读取Cookie

$_COOKIE其实就是个数组, 所以就当成数组使用即可.

print_r($_COOKIE);

数组形态的Cookie

注意,setcookie() 第二个参数,必须为字符串, 所以不能直接把数组存进来, 可用采用以下方法

setcookie("user[username]", "aaron");
setcookie("user[password]", md5("123456"));
setcookie("user[email]", "canonpd@gmail.com");

print_r($_COOKIE);

删除Cookie

// 只设置第一个参数, 表示删除该Cookie
setcookie("user");

//直接设为过期时间, 同样可用删除Cookie
setcookie("user", "", time()-1);

Cookie登陆实例

index.php
```php
<?php
//判断用户是否通过了身份验证
if($_COOKIE["isLogin"]) {
//从Cookie中获取登录用户名输出
echo '您好:'.$_COOKIE["username"].',  ';
//为用户提供一个退出的操作链接
echo '退出';
} else {
//如果用户没有通过身份验证
//页面跳转至登录页面
header("Location:login.php");

//终止程序继续执行
exit;

}
?>


网站主页面



这里显示网页的主体内容




```

login.php
```php
<?php
//声明一个删除Cookie的函数,调用时清除在客户端设置的所有Cookie
function clearCookies() {
//删除Cookie中的标识符为username的变量
setCookie('username', '', time()-3600);

//删除Cookie中的标识符为isLogin的变量
setCookie('isLogin', '', time()-3600);

}

//判断用户是否执行的是登录操作
if($_GET["action"]=="login") {
//调用时清除在客户端先前设置的所有Cookie
clearCookies();

//检查用户是否为admin,并且密码是否等于123456
if($_POST["username"]=="admin" && $_POST["password"]=="123456") {
    //向Cookie中设置标识符为username,值是表单中提交的,期限为一周
    setCookie('username', $_POST["username"], time()+60*60*24*7);
    //向Cookie中设置标识符为isLogin,用来在其他页面检查用户是否登录
    setCookie('isLogin', '1', time()+60*60*24*7);
    //如果Cookie设置成功则转向网站首页
    header("Location:index.php");
}else{
    die("用户名或密码错误!");
}

} else if($_GET["action"]=="logout") {
//判断用户是否执行的是退出操作
//调用时清除在客户端设置的所有Cookie
clearCookies();
}
?>


用户登录



<!-- 以HTML形式输出用户登录表单,提交给本页面 -->
















用户登录

用户名
密  码






```

以上范例并不安全, 真实工作中,还需要在cookie保存用户名,和加密字符串,例如MD5加密并截取过的用户密码.

再与数据库的中比对验证, 达到免登陆的效果.