会话管理简介
Cookie:
- cookie常用于识别用户。
- cookie 是服务器留在用户计算机中的小文件,每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie。
- 通过PHP能够创建并取回cookie的值。
- cookie只能读取所在域,单一域不能超过20个cookie,每个cookie文件长度上限位4k字节,浏览器最多储存300个cookie。
Session:
- PHP中的session变量用于存储有关用户会话的信息,或更改用户会话的设置。
- Session 变量保存的信息是单一用户的,并且可供应用程序中的所有页面使用。
- Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。
结合Cookie和Session
- 使用Cookie和附加URL参数都可以将上一次请求的状态信息传递到下一次请求中,但是如果传递的状态信息较多,将极大降低网络传输效率和增大服务器端程序处理的难度。
- Session技术是一种将会话状态保存在服务器端的技术 ,它可以比喻成是医院发放给病人的病历卡和医院为每个病人保留的病历档案的结合方式 。
- 客户端需要接收、记忆和回送 Session的会话标识号,Session可以且通常是借助Cookie来传递会话标识号。
会话管理实践
本部分代码已经上传到了git中,点我进入
1.建立一个利用cookie统计登录次数的页面session.html进行简单的测试:
2.实现会话管理部分的核心代码
- 在logIn.php中
if(!isset($_COOKIE['userid']))//判断用户是否已经设置cookie,如果未设置$_COOKIE['userid']执行if下的代码。
{ }
else//如果用户已经登录,则执行else下的代码。
{ }
- 在logOut.php中
<?php
if(isset($_COOKIE['userid'])){
//将各个cookie的到期时间设为过去的某个时间,使它们由系统删除,时间以秒为单位
setcookie('userid','',time()-3600);
setcookie('username','',time()-3600);
}
//location首部使浏览器重定向到另一个页面
$home_url = 'logIn.php';
header('Location:'.$home_url);
?>
3.通过使用cookie保存信息,实现登录页面不需再次登陆的功能,涉及到的代码已经上传git,点我进入
4.这个时候关闭浏览器,再次进入的时候也会出现已经登陆成功的界面,如果想要退出登录,点击log out
即可。
登陆发帖功能
本部分代码已经上传到了git中,点我进入
1.这一部分采用了写入文件和读取文件从而实现发帖的方式,核心代码有
(1)将输入的帖子标题和内容写入文件保存
file_put_contents('data.txt',"title:".$title.",content:".$content."
", FILE_APPEND);
(2)将文件中的数据进行读取,并将/n
替换为换行符<br>
$content = file_get_contents("data.txt");
echo str_replace("
", "<br>", $content);
(3)在loged.php界面添加一个超链接到test.html界面,即可将之前的登录、会话管理和发帖功能连接起来
echo '<a href="test.html">start a new post!</a>';
2.实现的效果如下
-
登录成功
-
点击start a new post发帖,进入如下界面
-
提交之后跳转到如下界面,可以选择查看发过的帖子、继续发帖、返回或者退出登录