01.php
<?php
/****
燕十八 公益PHP讲堂
论 坛: http://www.zixue.it
微 博: http://weibo.com/Yshiba
YY频道: 88354001
****/
/***
====笔记部分====
用户注册之后,我们需要做用户登陆,退出
需要的知识点:cookie & session
***/
/*
看一个问题: 我是谁?
比如说 我们需要看自己的注册资料,即用户表的自己的信息,
连上mysql,查询数据,地址栏传参,传user_id,
根据user_id,查询用户信息.
*/
$user_id = $_GET['user_id'] + 0;
$conn = mysql_connect('localhost','root','111111');
$sql = 'use boolshop';
mysql_query($sql,$conn);
$sql = 'set names utf8';
mysql_query($sql,$conn);
$sql = 'select * from user where user_id=' . $user_id;
$rs = mysql_query($sql,$conn);
print_r(mysql_fetch_assoc($rs));
/**
思考:如果我的user_id是5,我在地址栏输入5,看到自己的信息.
但是如果把user_id改成6,岂不是看到了别人的信息?
如何才能控制 只看到自己的信息?
**/
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
<head>
<title>新建网页</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="" />
<meta name="keywords" content="" />
<script type="text/javascript">
</script>
<style type="text/css">
</style>
</head>
<body>
<form action="02.php" method="post">
用户名:<input type="text" name="username" />
密码:<input type="text" name="passwd" />
<input type="submit" value="登陆" />
</form>
</body>
</html>
02.php
<?php
/****
燕十八 公益PHP讲堂
论 坛: http://www.zixue.it
微 博: http://weibo.com/Yshiba
YY频道: 88354001
****/
/***
====笔记部分====
这个页面非常重要,不是网站的用户,不能看
***/
// 奇Yu同学的方法,先判断用户名/密码,然后定义常量,
// 下面的代码检查常量
$conn = mysql_connect('localhost','root','111111');
$sql = 'use boolshop';
mysql_query($sql,$conn);
$sql = 'set names utf8';
mysql_query($sql,$conn);
$u = $_POST['username'];
$p = $_POST['passwd'];
$sql = "select count(*) from user where username='" . $u . "' and passwd='" . md5($p) . "'";
$rs = mysql_query($sql,$conn);
$row = mysql_fetch_row($rs);
if($row[0] == 1) {
// 登陆成功
define('USER',true);
} else {
echo '用户名密码错误';
exit;
}
if(!defined('USER')) {
echo '你没有登陆';
exit;
}
// 如果把这行代码控制住,非本站用户不能看
echo '这部分非常重要! 当你看到时,说明你是本站用户';
echo 'very important!';
?>
<a href="03.php">个人隐私页面</a>
03.php
<?php
/****
燕十八 公益PHP讲堂
论 坛: http://www.zixue.it
微 博: http://weibo.com/Yshiba
YY频道: 88354001
****/
if(!defined('USER')) {
echo '你没有登陆';
exit;
}
// 如果把这行代码控制住,非本站用户不能看
echo '这部分非常重要! 当你看到时,说明你是本站用户';
echo 'very important!';
04.php
<?php
/****
燕十八 公益PHP讲堂
论 坛: http://www.zixue.it
微 博: http://weibo.com/Yshiba
YY频道: 88354001
****/
/***
====笔记部分====
思考:
02.php中的常量/变量 ,和03.php毫无关系,
因此,02.php中做了用户名/密码的验证,到03.php,使不上.
总不能每个页面都需要提交用户名/密码吧.
生活中的场景:
一群人,买豆浆,也不排队,乱哄哄的
豆浆现磨.
先交钱,交完钱蹲在一边等.
这个老板----非常健忘! 记忆时间:转脸就忘.
李四给老板钱<--->"大杯黄豆!" 交互结束.
李四来取豆浆时(这已经是和老板再一次打交道了),
而老板早已忘的干干净净.
请问:如何帮助老板记住客户!!!
解决方案:
每当有人交完钱,
老板发给他一个小纸片:
"红豆1杯","绿豆一杯","黄豆一杯"
当你来取豆浆时,拿着牌子来!
***/
// 给你牌子!
setcookie('user','zhangsan');
echo '给你zhangsan牌子!';
<?php
/****
燕十八 公益PHP讲堂
论 坛: http://www.zixue.it
微 博: http://weibo.com/Yshiba
YY频道: 88354001
****/
/**
查看你的牌子,读cookie
问:
登陆时,是谁给谁cookie信息?
验证用户是否登陆时,是谁给谁cookie信息?
答:
1.服务器给客户端
2.客户端给服务器
问:
服务器如何给浏览器cookie?
客户端发给服务器cookie后,服务器如何读?
答:
在PHP中,服务器设置cookie用,setcookie()函数
在PHP中,读取cookie,不用特殊的方法,
因为cookie的信息已经被PHP处理到$_COOKIE这个超级全局数组里了!
直接读$_COOKIE即可.
**/
print_r($_COOKIE);
echo '你是',$_COOKIE['user'];
06.php
<?php
/****
燕十八 公益PHP讲堂
论 坛: http://www.zixue.it
微 博: http://weibo.com/Yshiba
YY频道: 88354001
****/
/***
====笔记部分====
用cookie来完成浏览历史功能,
之前 先做一个cookie计数器来练手
***/
// 用cookie来记录来本网站已经访问了多少页面
// 如果这个页面是第1次访问,没有cookie信息
/*
if(!isset($_COOKIE['num'])) { // 第一次来访问,还没有cookie
setcookie('num',1);
} else { // 有cookie信息,已经不是第1次来访问了.
setcookie('num',$_COOKIE['num'] + 1);
}
echo '这是你的第',$_COOKIE['num'],'次访问';
*/
if(!isset($_COOKIE['num'])) { // 第一次来访问,还没有cookie
$num = 1;
setcookie('num',$num);
} else { // 有cookie信息,已经不是第1次来访问了.
$num = $_COOKIE['num'];
setcookie('num',$num + 1);
}
echo '这是你的第',$num,'次访问';
07.php
<?php
/****
燕十八 公益PHP讲堂
论 坛: http://www.zixue.it
微 博: http://weibo.com/Yshiba
YY频道: 88354001
****/
/***
====笔记部分====
cookie来做浏览历史
***/
$uri = $_SERVER['REQUEST_URI'];
/*
把uri放在cookie里
setcookie('history',array($uri));
这是错误写法,因为cookie只能存储字符串,数字,不能存储数组,资源这样的多维数据
因此$uri要放在数组里,但数组要转化成字符串
*/
if(!isset($_COOKIE['history'])) { // 第1次
$his[] = $uri;
} else { // 已经是第N次访问了
$his = explode('|',$_COOKIE['history']);
array_unshift($his,$uri);
$his = array_unique($his);
if(count($his) > 10) {
array_pop($his);
}
}
setcookie('history',implode('|',$his));
$id = isset($_GET['id'])?$_GET['id']:0;
?>
<p>
<a href="07.php?id=<?php echo $id-1; ?>">上一页</a> <br />
</p>
<p>
<a href="07.php?id=<?php echo $id+1; ?>">下一页</a> <br />
</p>
<ul>
<li>浏览历史</li>
<?php foreach($his as $v) { ?>
<li><?php echo $v; ?></li>
<?php } ?>
</ul>
readcookie.php
<?php
/****
燕十八 公益PHP讲堂
论 坛: http://www.zixue.it
微 博: http://weibo.com/Yshiba
YY频道: 88354001
****/
/***
====笔记部分====
***/
print_r($_COOKIE);
setcookie.php
<?php
/****
燕十八 公益PHP讲堂
论 坛: http://www.zixue.it
微 博: http://weibo.com/Yshiba
YY频道: 88354001
****/
/***
====笔记部分====
setcookie()方法详细学习
setcookie()可以用2个参数,3个参数,4个参数,5个参数来设置
***/
/*
2个参数设置cookie
cookie随着浏览器的关闭,就失效了.
*/
setcookie('age',29);
/*
下面我们让cookie多活一会!
3个参数来设置cookie,第3个参数指的就是cookie的生命周期,以时间戳为单位
关掉浏览器后,可以对比出效果,age 关掉浏览器就失效
而school能存活1小时
*/
setcookie('school','MBA',time()+3600);
/***
cookie的作用域
一个页面设置的cookie,
默认在其同级目录下,及子目录下可以读取.
如果想让cookie整站有效,可以在根目录下setcookie
也可以用第4个参数,来指定cookie生效路径
***/
setcookie('gloabl','any where!',time()+3600,'/');
/*
cookie是不能够跨域名(否则安全问题就太大了!)
比如sohu.com的cookie,不能被发到sina.com用
但是,可以在一个域名的子域名下使用
需要用第5个参数,来表示
例: setcookie('key','value',time()+2000,'/','.sina.com.cn');
这个cookie在book.sina.com.cn可以用
在mili.sina.com.cn也可以用
*/
echo 'cookie set ok';
销毁cookie
<?php
/****
燕十八 公益PHP讲堂
论 坛: http://www.zixue.it
微 博: http://weibo.com/Yshiba
YY频道: 88354001
****/
// 销毁cookie,把有效期改为0即可
setcookie('school','',0);