第十一章会话控制cookie和session

当我们在浏览网页时,访问每一个web页面都需要使用"HTTP协议"实现,但是HTTP协议是无状态协议,就是说HTTP协议没有一个内建机制来维护两个事务之间的状态。当一个用户请求一个页面以后,在请求同一个网站上的另外一个页面时,HTTP协议并不能告诉我们两个请求是来自同一个用户,而不能将这两次访问联系到一起!
那有怎么解决方法呢?
Cookie
Session

一、cookie

 Cookie是用来将网站的资料记录在客户端的技术,这种技术让Web服务器能将一些
 资料,存放于客户端(用户的电脑)之中。
 比如:当通过验证,成功登录网站后,在”网页一“的PHP脚本中,会把这个用户
 有关的信息,设置到客户端电脑的Cookie中,当再次访问同一个网站中的其他脚
 本时,就会自动携带Cookie中的数据一起访问,在服务器中的每个脚本中都可以
 接受Cookie中的数据,不需要每访问一个页面就重新输入一次登录者的信息。
 1.向客户端电脑中设置Cookie
 2.在服务器端上读取Cookie的内容
 3.将多维数组应用于Cookie中
 4.删除Cookie

一、cookie
1.向客户端电脑中设置Cookie
setcookie ();
2.在服务器端上读取Cookie的内容
$_COOKIE
3.将多维数组应用于Cookie中
setcookie(“member[name]”,‘孙胜利’);
setcookie(“member[email]”,‘1205429372@qq.com’);
4.删除Cookie
setcookie(“member”,’’,time()-1);
注意点:
使用setcookie删除cookie的时候,需要与当初设置cookie的时候参数一致!

<?php 
header('Content-type:text/html;charset=utf-8');
/*
var_dump(setcookie('name','孙胜利',time()+3600));
var_dump(setcookie('email','1205429372@qq.com',time()+3600));
*/
var_dump(setcookie('member[name]','孙胜利',time()+3600));
var_dump(setcookie('member[email]','1205429372@qq.com',time()+3600));
?>
<?php
header('Content-type:text/html;charset=utf-8');
var_dump($_COOKIE);
?>
<?php
header('Content-type:text/html;charset=utf-8');
var_dump($_COOKIE);
?>
<?php 
foreach ($_COOKIE['member'] as $key=>$val){
	var_dump(setcookie("member[{$key}]",'',time()-3600));
}
?>

IE浏览器cookie

<?php 
//参数随机id
$id=uniqid(rand(1000, 9999).'_');
var_dump(setcookie('id',$id,time()+3600));
?>

1

<?php 
var_dump($_COOKIE);
?>

2

<?php 
var_dump($_COOKIE);
?>

删除

<?php 
setcookie('id','',time()-3600);
?>

在这里插入图片描述

二、session

二、session
Session技术与Cookie相似,都是用来存储使用者的相关资料,但是最大的不同之
处在于Cookie是将资料存储在客户端电脑中,而Session则是将数据存放于服务器
上。把保存的资料比喻成超市里面的会员卡,Cookie技术就相当于需要用户自己
保存会员卡,每次去超市必须要持有会员卡才能代表自己的身份,那么Session技
术就相当于会员卡由超市方保存,每次来超市的时候只需要报出会员卡的卡号(我
们可以称为Session ID,客户端的cookie中只需要保存Session ID)即可!
1.开启session
2.使用session存储数据
3.注销变量与销毁session

1.开启session
	session_start();
	1)开启一个会话
		一个客户 到超市里面买东西 办会员卡!
		
	2)打开已经存在的会话
		当这个客户 以后再到超市买东西的时候 根据上次办的卡号 买东西!
		根据客户端传来的session id 把这个 session id 对应的数据 读取到 $_SESSION这个变量里面

1.开启session
session_start();//开启一个会话,或者返回已经存在的会话
2.使用session存储数据
session_start();
$_SESSION[‘username’]=‘sunshengli’;
S E S S I O N [ ′ e m a i l ′ ] = ′ 1205429372 @ q q . c o m ′ ; 3. 注 销 变 量 与 销 毁 s e s s i o n u n s e t ( _SESSION['email']='1205429372@qq.com'; 3.注销变量与销毁session unset( SESSION[email]=1205429372@qq.com;3.sessionunset(_SESSION[‘username’]);
unset( S E S S I O N [ ′ e m a i l ′ ] ) ; 或 者 _SESSION['email']); 或者 SESSION[email]);_SESSION=array();
setcookie(session_name(),"",time()-3600);
在这里插入图片描述

<?php
header('Content-type:text/html;charset=utf-8');
session_start();    //1.开启session session_start();1)开启一个会话 一个客户 到超市里面买东西 办会员卡!
		
$_SESSION['name']='孙胜利';
$_SESSION['email']='1205429372@qq.com';
$_SESSION['url']='sifangku.com';
<?php 
header('Content-type:text/html;charset=utf-8');
session_start();      
/*2)打开已经存在的会话
			当这个客户 以后再到超市买东西的时候 根据上次办的卡号 买东西!
			根据客户端传来的session id 把这个 session id 对应的数据 读取到 */
var_dump($_SESSION);
var_dump($_COOKIE);
var_dump(session_name());//获取当前卡号的ID       最后这里能输出是因为开启了一个新的对话session_start();  分配一个新的卡号  
?>
<?php 
session_start();//打开要销毁的会话!
session_unset();//Free all session variables   销毁变量
session_destroy();//销毁一个会话中的全部数据   //把服务器中的文件给干掉了
setcookie(session_name(),'',time()-3600,'/');//销毁保存在客户端的卡号(session id)
// '/'要根据php的配置设置      cookie_path= / ;
?>

cookie和session 登陆模块
cookie

<?php 
<?php
	header('Content-type:text/html;charset=utf-8');
	
	
	<?php 
header('Content-type:text/html;charset=utf-8');
if (isset($_COOKIE['username']) && $_COOKIE['username']==='sunshengli') {
	exit('您已经登录请不要重复登录');        //后面的表单也不输出
}
	
if(isset($_POST['submit']))
{
	if(isset($_POST['username']) && isset($_POST['password']) && $_POST['username']==='sunshengli' && $_POST['password']==='123456')
	{
	   if(setcookie('username',$_POST['username'],time()+3600))
	   {
	   header('Location:3.php?url=2.php&info=登陆成功正在跳转!');//这里先输出后面的info因为它是div然后在跳转 //跳转到另外一个界面
	   }
		else
		{
			echo 'cookie设置失败';
		}
	}
	else{
		header('Location:3.php?url=2.php&info=对不起,用户名或密码填写错误,登录失败!');//这里先输出后面的info因为它是div然后在跳转
	    }
}
?>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>请登陆</title>
	</head>
	<body>
		<form method="post" action="demo1.php">
			姓名:<input type="text" name="username">
			密码:<input type="password" name="password">
			<input type="submit" name="submit" value="登陆">
		</form>
		
	</body>
</html>	
<?php
header('Content-type:text/html;charset=utf-8');
if (isset($_COOKIE['username']) && $_COOKIE['username']==='sunshengli') {
	echo "亲爱的{$_COOKIE['username']}您好,欢迎回来!";
		echo "<a href='4.php'>注销</a>";
}else {
	echo "<a href='demo1.php'>请登录</a>";
}

?>
<?php 
if (!isset($_GET['url']) || !isset($_GET['info'])) {
	exit();
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta http-equiv="refresh" content="3;URL=<?php echo $_GET['url'] ?>" />
<title>正在跳转中...</title>
</head>
<body>
	<div style="text-align:center;font-size:20px;"><?php echo $_GET['info'] ?>3秒后自动跳转!</div>
</body>
</html>>
<?php
if (isset($_COOKIE['username']) && $_COOKIE['username']==='sunshengli') {
if(setcookie('username',$_POST['username'],time()-3600))
	   {
	   	 header('Location:3.php?url=2.php&info=注销成功,正在跳转!');
	   }
}else {
 header('Location:3.php?url=2.php&info=注销失败,正在跳转!');
}
?>

session

<?php 
session_start();
header('Content-type:text/html;charset=utf-8');
if (isset($_SESSION['username']) && $_SESSION['username']==='sunshengli') {
	exit('您已经登录请不要重复登录');
}
if(isset($_POST['submit'])){
	if(isset($_POST['username']) && isset($_POST['password']) && $_POST['username']==='sunshengli' && $_POST['password']==='123456'){
		$_SESSION['username']=$_POST['username'];
		header('Location:skip.php?url=index.php&info=登录成功,正在跳转中!');
	}else{
		header('Location:skip.php?url=index.php&info=对不起,用户名或密码填写错误,登录失败!');
	}
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<title>请登录</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>
<?php 
session_start();
header('Content-type:text/html;charset=utf-8');
if (isset($_SESSION['username']) && $_SESSION['username']==='sunshengli') {
	echo "亲爱的{$_SESSION['username']}您好,欢迎回来!";
	echo "<a href='logout.php'>注销</a>";
}else {
	echo "<a href='login.php'>请登录</a>";
}

?>
<?php 
session_start();
header('Content-type:text/html;charset=utf-8');
if (isset($_SESSION['username']) && $_SESSION['username']==='sunshengli') {
	session_unset();//Free all session variables
	session_destroy();//销毁一个会话中的全部数据
	setcookie(session_name(),'',time()-3600,'/');//销毁保存在客户端的卡号(session id)
	header('Location:skip.php?url=index.php&info=注销成功,正在跳转中!');
}else{
	header('Location:skip.php?url=index.php&info=注销失败,请稍后重试!');
	
}
?>
<?php 
if (!isset($_GET['url']) || !isset($_GET['info'])) {
	exit();
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta http-equiv="refresh" content="3;URL=<?php echo $_GET['url'] ?>" />
<title>正在跳转中...</title>
</head>
<body>
	<div style="text-align:center;font-size:20px;"><?php echo $_GET['info'] ?>3秒后自动跳转!</div>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值