当我们在浏览网页时,访问每一个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>