PHP--学习笔记---10会话控制

1.会话跟踪的方式
  • 超链接,header()等重定向的方式,通过在get请求中附加参数的形式
  • Cookie保存状态信息
  • Session将访问者的状态存放在服务器中。
2.向客户端计算机设置Cookie,setCookie()

setcookie的格式:
bool setCookie(string $name,string $value,int $expire, string $path, string $domain,bool $secure)
除了第一个参数,其余都是非必须的,经常使用前三个
在这里插入图片描述

<?php
if (setcookie ( "myusername", "zhangsan", time () + 60 * 60 * 24 * 7 )) {
	echo '设置cookie成功';
}
?>

结果:
设置cookie成功

3.读取Cookie的资料内容

cookie存放在$_COOKIE全局数组中,并以cookie的识别名称作为索引值、内容值为元素。和 $_GET及 $_POST全局数组用法类似

<?php
echo '读取cookie'.'<br/>';
print_r ( $_COOKIE );

?>

结果:
读取cookie
Array ([myusername] => zhangsan )

4.数组形态的Cookie应用

利用多为数组的形式,将多个内容值存储在相同cookie下,但不能直接使用setCookie()函数
index.php

<?php
setcookie ( "user[username]", "张三" );
setcookie ( "user[password]", "zhangsan" );
setcookie ( "user[email]", "zhangsan@126.com" );
?>

show.php

<?php
echo '读取cookie' . '<br/>';
foreach ( $_COOKIE ['user'] as $key => $value ) {
	echo $key . ' | ' . $value . '<br/>';
}

?>

结果:
读取cookie
username | 张三
password | zhangsan
email | zhangsan@126.com

5.删除cookie,setcookie()

两种方式:
第一种:省略setcookie函数的所有参数列,仅仅导入第一个参数cookie识别名称参数
第二种:利用secookie函数把目标cookie设定为‘已过期’
1、login.php文件

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
</head>
<body>
<?php
// 清除cookie操作
function clearCookies() {
	setcookie ( 'thename', '', time () - 3600 );
	setcookie ( 'isLogin', '', time () - 3600 );
}

// 判断用户是否执行的事登录操作
if ($_GET ['action'] == 'login') {
	// 调用清除
	clearCookies ();
	if ($_POST ['thename'] == 'admin' && $_POST ['password'] == '123456') {
		// 设置cookie
		setcookie ( 'thename', $_POST ['thename'], time () + 60 * 60 * 24 );
		// 设置标识符为isLogin
		setcookie ( 'isLogin', '1', time () + 60 * 60 * 24 );
		// 设置成功后转向网站首页
		header ( 'Location:index.php' );
	} else {
		die ( "用户名或密码错误" );
	}
} else if ($_GET ['action'] == 'logout') {
	// 退出前再次清除cookie
	clearCookies ();
}
?>
<h2>用户登录</h2>
<form action='login.php?action=login' method="post">
用户名<input type='text' name='thename'/><br/>
密码<input type='password' name='password'><br/>
<input type='submit' value='登录'/>
</form>
</body>
</html>

2、index.php

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
</head>

<body>

<?php
// 如果用户没有登录成功,则页面跳转到登录页面
if (! (isset ( $_COOKIE ['isLogin'] ) && $_COOKIE ['isLogin'] == '1')) {
	header ( 'Location:login.php' );
	exit ();
}
echo '您好' . $_COOKIE ['thename'];
?>
<a href="login.php?action=logout">退出</a>
</body>
</html>
6.session概述

存放在服务器,使用sessionId来检索,如果没有该id,则创建一个id,并保持到cookie中,通过http请求头传递

7.配置session

在php.ini中进行配置
在这里插入图片描述
在这里插入图片描述

8.session的声明及使用

1、启动session,使用session_start()函数,将session的内奸环境变量预先载入到内存,格式如下:
bool session_start(void)
返回值为ture,两个作用,一个是开始一个会话,二是返回已经存在的会话

9.注册一个会话变量和读取session

session变量不仅需要启动还要进过注册
注册和读取session变量都要通过访问$_SESSION数组完成,必须在开启session之后(调用session_start()才能使用)

<?php
// 启动session的初始化
session_start ();
// 注册session变量,赋值为一个用户的名称
$_SESSION ['username'] = 'zhangsan';
// 注册session变量,赋值为一个用户的id
$_SESSION ['uid'] = 1;

?>
10.注销变量与销毁session–session_destory()

相对于session_start(),该函数用来关闭session运作,成功则传回true,失败返回false,当不释放当前变量,也不会删除客户端的sesssionId,可以使用unset()来释放在session中注册的单个变量如
unset( $_SESSION[“username”]);
unset( $_SESSION[“password”]);
不可以使用uset删除整个session数组,这将导致不能再通过 $_SESSION超全局数组注册变量,如果要将session中锁注册的所有变量都删除,可以直接将数组变量 $_SESSION赋上空数组
$_SESSION=array();

注销Session的4个步骤:
1、开启session并初始化
2、删除所有session的变量,也可用unset($_SESSION[XXX])逐个删除
3、如果是基于cookie的session,使用setcookie删除包含sessionId的cookie
4、最后彻底销毁session

<?php
// 第一步开启SESSION并初始化
session_start ();
// 第二步删除所有session的变量,也可以用unset($_SESSION[XXX])逐个删除
$_SESSION = array ();
// 第三步:如果基于cookie的session,使用setCookie()删除包含session id的cookie
if (isset ( $_COOKIE [session_name ()] )) {
	setcookie ( session_name () . '', time () - 42000, '/' );
}
// 第四步 最后彻底销毁Session
session_destroy ();
?>
10.session垃圾回收

关闭浏览器后自动回收,其他的一些设置在php.ini中设置

11.传递sessionId

两种方式
1、通过cookie传递sessionid,这种方法比较优化
2、通过url参数传递,直接将会话id嵌入到url中

通过cookie传递sessionid
实际执行了以下操作
setcookie ( session_name () .session_id(), 0, ‘/’ );

通过url传递sessionid
如果客户浏览器不支持cookie,则手动添加url中的sessionID
echo “<a href=‘demo.php?’.session_name.’=’.session_id().’”>演示"
不建议i,工作量太大

12.简单的邮件系统–数据准备

以后再演练

13.自定义session的存储机制

通过session_set_save_handdler()函数改变默认的处理方式,原型如下:
session_set_save_handler(callback open,callback close,callback read, callback write,callback destroy ,callback gc)
6个参数是必选参数,代表了session的6个生命周期阶段。
在这里插入图片描述

14.使用数据库处理session信息

大数据量访问需要负载均衡时使用
日后再做详细联系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值