php-cookie和session-1217

本文探讨了PHP中用户认证的基本流程,包括登录验证、利用cookie保持登录状态的方法,并介绍了如何通过cookie实现浏览历史记录等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,岂不是看到了别人的信息?

如何才能控制 只看到自己的信息?
**/





02.html

<!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牌子!';









05.php

<?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);





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值