Lemon's blog

PHP会话控制

Record my learning process of PHP.

字数统计: 1.1k阅读时长: 4 min
2019/04/20 Share

最近刚做完一个简易的登陆注册小项目,当时做的时候匆忙,现在来详细的了解一下PHP会话控制这方面的知识。

cookie和seesion技术出现的原因:

当一个用户请求一个页面时,再请求同一个网站上的另外一个页面时,HTTP协议不能告诉我们两个请求是否来自同一个用户,也不能将两次访问联系到一起!所有出现了cookie和seesion.

一、cookie

cookie是用来将网站的资料记录在客户端的技术,让web服务器将一些资料存放在客户端(用户的电脑中)。

1、向客户端电脑中设置cookie

1
setcookie();

2、在服务器端上读取cookie内容

1
$_COOKIE

3、将多维数组应用于cookie中
例如:

1
2
setcookie("member[name]",'www',time()+3600);
setcookie("member[email]",'1111',time()+3600);

4、删除cookie
例如:

1
2
3
4
5
6
7
8
setcookie("member[name]",'',time()-3600);
setcookie("member[email]",'',time()-3600);
//也可以采用遍历的方法
foreach ($_COOKIE['member'] as $key=>$val){
var_dump(setcookie("member[{$key}]",'',time()-3600));
}
//注意点:
使用setcookie删除cookie的时候,需要与当初设置cookie的时候参数一致!

二、session

session与cookie最大的不同就是,session是把具体信息保存在服务器端。

1、开启session
例如:

1
2
3
4
5
session_start();
$_SESSION['name']='www';
$_SESSION['email']='sss';
$_SESSION['url']='zzz';
/再另一个PHP文件中访问的时候必须加上

2、打开已存在的seesion

1
2
session_start();
var_dump($_SESSION);/注意打开之前一定要先开启seesion

3、注销变量与销毁session
先开启session

1
2
3
4
5
6
7
8
9
session_start();
session_unset();/释放所有变量
session_destroy();/销毁一个会话中的所有数据
setcookie('')/名字可以在设置session时,使用var_dump($_COOKIE)来获取cookie的名字
/也可以使用这样的方法
setcookie(session_name(),'',time()-3600);//销毁保存在客户端的cookie
/但这样的方法删除的不干净
/可以采用这样的方法删除干净
setcookie(session_name(),'',time()+3600,'/');'/'表示设置cookie的根目录

三、基于session和cookie的登陆模块

简易的用cookie来判断登陆
login.php(登陆文件)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
header('Content-type:text/html;charset=utf-8');
if (isset($_COOKIE['username']) && $_COOKIE['username']==='QTFY') {
exit('您已经登录请不要重复登录');
}
if(isset($_POST['submit'])){
if(isset($_POST['username'])&& isset($_POST['password']) && $_POST['username']==='QTFY' && $_POST['password']==='123'){
if(setcookie('username',$_POST['username'],time()+3600)){
header('Location:login.php');
}
else{
echo 'cookie设置失败!';
}
}
else
{
header('Location:skip.php?url=login.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>

index.php(判断是否有cookie以此来进行识别用户身份)

1
2
3
4
5
6
7
<?php
header('Content-type:text/html;charset=utf-8');
if(isset($_COOKIE['username']) && $_COOKIE['username']==='QTFY'){
echo "{$_COOKIE['username']}你好,欢迎回来!";
}else{
echo "<a href='login.php'>请重新登陆</a>";
?>

这样就可以做一个简易的登陆页面(带判断)
skip.php(简单的跳转页面)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
header('Content-type:text/html;charset=utf-8');
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']?>"/>//3秒
<title>正在跳转</title>
</head>
<body>
<div style="text-align:center;font-size:20px;"><?php echo $_GET['info'] ?>,三秒后自动跳转</div>
/info提示信息
</body>
</html>

loginout(注销功能页面)

1
2
3
4
5
6
7
8
9
10
<?php 
header('Content-type:text/html;charset=utf-8');
if (isset($_COOKIE['username']) && $_COOKIE['username']==='QTFY') {
if(setcookie('username',$_POST['username'],time()-3600)){
header('Location:skip.php?url=index.php&info=注销成功,正在跳转中!');
}else{
header('Location:skip.php?url=index.php&info=注销失败,请稍后重试!');
}
}
?>

这样基于cookie的登陆页面就基本实现了
session与cookie基本相同
要注意:用session时,首先开启session。

这里就不演示了,具体的看之前做的登陆注册页面。这里又学到了一个跳转页面,之前都不知道如何用。

CATALOG
  1. 1. cookie和seesion技术出现的原因:
  2. 2. 一、cookie
  3. 3. 二、session
  4. 4. 三、基于session和cookie的登陆模块