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

cookie和seesion技术出现的原因:

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

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

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

setcookie();

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

$_COOKIE

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

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

4、删除cookie
例如:

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
例如:

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

2、打开已存在的seesion

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

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

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(登陆文件)

<?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以此来进行识别用户身份)

	<?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(简单的跳转页面)

<?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(注销功能页面)

<?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。

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