第十一章 会话控制
cookie
概述
cookie是用来将网站的资料记录在客户端的技术,这种技术让Web服务器能将一些资料,存放于客户端(用户的电脑)之中。
比如,当通过验证,成功登录网站后,在“网页一”的php脚本中,会把这个用户有关的信息,设置到客户端电脑的cookie中,当再次访问同一个网站中的其他脚本时,就会自动携带Cookie中的数据一起访问,在服务器中的每个脚本中都可以接受cookie中的数据,不需要每访问一个页面就重新输入一次登录者的信息。
操作流程
1.向客户端的电脑中设置cookie
setcookie放在html标签前面
setcookie(name, value, expire, path, domain);
<?php
$value = "my cookie value";
// send a simple cookie
setcookie("TestCookie",$value);
?>
2.在服务器端读取cookie中的内容
<?php
// Print individual cookies
echo $_COOKIE["TestCookie"];
?>
3.将多维数组应用于cookie中
在一个文件中设置cookie数组
setcookie("cookie[three]","cookiethree");
setcookie("cookie[two]","cookietwo");
setcookie("cookie[one]","cookieone");
在另一个php文件中使用for循环度取cookie数组信息
if (isset($_COOKIE["cookie"]))
{
foreach ($_COOKIE["cookie"] as $name => $value)
{
echo "$name : $value <br />";
}
}
4.删除cookie
把有效期设置为过去
// Set the expiration date to one hour ago
setcookie ("TestCookie", "", time() - 3600);
ps:使用setcookie删除cookie时,需要与当初设置cookie的时候参数一致
5.使用:为每一个用户设置相同的id
<?php
//产生参数随机id
$id=uniqid(rand(1000,9999).'_');
setcookie('id',$id,time()+3600);
echo $id;
echo $_COOKIE['id'];
session
概述
seesion技术和cookie相似,都是用来存储使用者的相关资料,但是最大的不同之处在于cookie是将资料存储在客户端中,而session则是将数据存放于服务器上。客户端只需要保存session ID即可。
操作流程
1.开启session
session_start();
1)开启一个会话
产生ID
<?php
session_start();
$_SESSION['name']='John';
$_SESSION['email']='21423554534@qq.com';
$_SESSION['url']='www.baidu.com';
2)返回已经存在的会话
根据客户端的ID查找用户在服务器端的数据
<?php
产生参数随机id
//$id=uniqid(rand(1000,9999).'_');
//setcookie('id',$id,time()+3600);
//echo $id;
session_start();
echo $_SESSION['name'];
echo "<br>";
echo $_SESSION['email'];
echo "<br>";
echo $_SESSION['url'];
echo "<br>";
ps:利用session测浏览量
<?php
session_start();
if(isset($_SESSION['views']))
{
$_SESSION['views']=$_SESSION['views']+1;
}
else
{
$_SESSION['views']=1;
}
echo "浏览量:". $_SESSION['views'];
?>
2.删除session
利用unset释放指定变量
<?php
session_start();
if(isset($_SESSION['views']))
{
unset($_SESSION['views']);
}
?>
利用session_destroy()彻底销毁session
session_destroy() 将重置 session,您将失去所有已存储的 session 数据。
<?php
session_destroy();
?>
基于cookie和session的登录模块
cookie\index.php
<?php
header('Content-type:text/html;charset=utf-8');
if(isset($_COOKIE['username'])&& $_COOKIE['username']=='John')
{
echo "欢迎回来!",$_COOKIE['username'];
echo "<a href='logout.php'>注销</a>";
}
else{
echo "未登录<a href='login.php'>点击跳转到登录界面</a>";
}
cookie\login.php
<?php
if(isset($_COOKIE['username'])&&$_COOKIE['username']==='John')
{
exit('已成功登录');
}
if(isset($_POST['submit']))
{
if(isset($_POST['username'])&&isset($_POST['password'])&&$_POST['username']=='John'&&$_POST['password']==='123456')
{
if(setcookie('username',$_POST['username']))
{
header('Location:index.php');
}
else
{
echo 'something wrong';
}
}
else
{
echo"fail to login";
}
}
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<form method="post" action="login.php">
姓名:<input type="text" name="username">
密码:<input type="password" name="password">
<input type="submit" name="submit" value="登录">
</form>
</body>
</html>
cookie\logout.php
<?php
header('Content:text/html;charset=utf-8');
if(isset($_COOKIE['username'])&&$_COOKIE['username']==='John')
{
if(setcookie('username',$_COOKIE['username'],time()-3600))
{
echo"注销成功";
echo"<a href='login.php'>登录</a>";
}
else{
echo 'error';
}
}
session\index.php
<?php
session_start();
header('Content-type:text/html;charset=utf-8');
if(isset($_SESSION['username'])&& $_SESSION['username']=='John')
{
echo "欢迎回来!",$_SESSION['username'];
echo "<a href='logout.php'>注销</a>";
}
else{
echo "未登录<a href='login.php'>点击跳转到登录界面</a>";
}
session\login.php
<?php
session_start();
if(isset($_SESSION['username'])&&$_SESSION['username']==='John')
{
exit('已成功登录');
}
if(isset($_POST['submit']))
{
if(isset($_POST['username'])&&isset($_POST['password'])&&$_POST['username']=='John'&&$_POST['password']==='123456')
{
$_SESSION['username']=$_POST['username'];
header('Location:index.php');
}
else
{
echo"fail to login";
}
}
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<form method="post" action="login.php">
姓名:<input type="text" name="username">
密码:<input type="password" name="password">
<input type="submit" name="submit" value="登录">
</form>
</body>
</html>
session\logout.php
<?php
session_start();
header('Content:text/html;charset=utf-8');
if(isset($_SESSION['username'])&&$_SESSION['username']==='John') {
session_unset();
session_destroy();
setcookie(session_name(),'',time()-3600,'/');
echo "注销成功!<a href='login.php'>登录</a>";
}
else{
echo 'error';
}