036 PHP的cookie,session以及mysql的连接

一:cookie

1.1:php会话控制

浏览网页的时候,使用的时http协议
客户端发出请求
服务端给出响应
 

1.2:什么是cookie

cookie:是存储在客户端的一段文本(文件/字符串),由服务器发给客户端的,每次客户端浏览器在发出请求的时候,都会自动携带cookie信息

cookie的属性:

name		cookie的名称
value		cookie的值
expire		cookie的过期时间
path		cookie的有效路径
domain		cookie的域名
secure		把secure设置为true时,只有在https才会设置cookie
httponly	仅仅通过http协议访问,不能通过JS访问

设置cookie的语句:

<?php
setcookie();
?>

浏览器查看cookie
在这里插入图片描述
接收cookie信息

<?php
var_dump($_COOKIE);
?>

在这里插入图片描述
cookie的更改:
可以在1.php界面任意修改cookie的值,然后在2.php界面刷新查看值的变化。
 
index.php

<meta charset="utf-8">
<h1> 刹那芳华论坛 </h1>
<?php
if(isset($_COOKIE["name"])){		# 判断cookie中的值是否存在
	echo "欢迎您,{$_COOKIE['name']}<a href='./logout.php'>注销</a>";
}else{
	echo "<a href='./login.php'>请登录</a>";
}

?>

login.php

<meta charset="utf-8">
<?php
if(isset($_POST["userSubmit"])){		# 判断有没有点击登录按钮
	if(
		isset($_POST["userName"]) && $_POST["userName"]=="xx" 
		&& isset($_POST["userPass"]) && $_POST["userPass"]=="123"
	){
		if(setcookie("name","xx")){		# 写入cookie值,做为首页是否登录成功的依据
			echo "登录成功,<a href='./index.php'>返回首页</a>";
		}else{
			echo "cookie值设置错误";
		}	
	}else{
		echo "用户名或者密码错误,<a href='./login.php'>请重新登录</a>";
	}	
}else{
	$html=<<<HTML
	<form action="" method="post">
	用户名:<input type="text" name="userName"><br />
	密  码:<input type="password" name="userPass"><br />
	<input type="submit" name="userSubmit" value="登录">
	</form>
HTML;
	echo $html;
}
?>

logout.php

<?php
setcookie("name",$_COOKIE['name'],time()-3600); 		# time()表示的是当前时间,3600秒,注销,过去的一小时就过期了
?>

在这里插入图片描述
 
cookie信息的窃取与欺骗
首先我们在虚拟机上登录
在这里插入图片描述
我们切换到真实机上的一款浏览器上,输入地址,发现处于未登录状态
在这里插入图片描述
因为cookie被窃取了,所以我们在第二个浏览器上手动加入cookie,F12打开控制台
输入

document.cookie=("name=xx")

然后刷新网页
在这里插入图片描述

发现登录成功了,并且原来的第一个浏览器注销了,也不会对第二个浏览器的登录状态造成影响

 
 

二:session

cookie信息存储在浏览器端,session信息存储在服务端,session机制依赖cookie实现,有一个属性叫做session id

	session_start();		# 开启session机制
	$_SESSION		完成对session数据的读写   
	session的销毁,直接使用[session_destroy()]函数即可,运行此函数,服务器会删除session缓存,但是cookie信息依然存在
		<?php
			session_start();
			session_destroy();
		?>

窃取和欺骗
cookie的一个浏览器的注销不会影响另一个浏览器的登录状态。
session的一个浏览器的注销会导致另一个浏览器的登录状态消失(点击刷新之后),所以安全性比cookie高。

 
源码:
index.php

<?php
session_start();		# 开启session机制
?>
<meta charset="utf-8">
<h1>刹那芳华论坛</h1>
<?php
if(isset($_SESSION['userName']) && $_SESSION['userName']=="xx"
	){
	echo "欢迎您,".$_SESSION['userName']."! <a href='./logout.php'>注销</a>";
}else{
	echo "<a href='./login.php'>请登录</a>";
}
?>

login.php

<?php
session_start();
echo "<meta charset='utf-8'>";
?>
<?php
if(isset($_POST['userSubmit'])){
	if(
		isset($_POST['userName']) && $_POST['userName']=="xx"
		&& isset($_POST['userPass']) && $_POST['userPass']=="123"
	){
		$_SESSION['userName'] = $_POST['userName'];		# 把值传入session进行保存
		echo "登录成功,<a href='./index.php'>返回首页</a>";
	}else{
		echo "用户名或者密码错误,<a href='./login.php'>请重新登录</a>";
	}
}else{
	$html=<<<HTML
<form action="" method="post">
用户名:<input type="text" name="userName"><br />
密码:<input type="password" name="userPass"><br />
<input type="submit" name="userSubmit" value="登录">
</form>
HTML;
echo "$html";
}
?>

logout.php

<?php
session_start();
session_destroy();
echo "<meta charset='utf-8'>已注销,<a href='./index.php'>返回首页</a>";
?>

同样的按照上方cookie的窃取方法,对session进行窃取,会发现,只要一个浏览器点了注销按钮,那么另一个浏览器的登录状态也会消失(页面刷新之后),这是因为session保存在服务器上,注销操作其实就是把服务器上的该账号对应的session文件给删除了
 
 

三:PHP与mysql的连接

mysql数据库的创建

登录http://localhost/phpMyAdmin
	账号密码:[root root]
数据库名:刹那芳华
表		users
		id		主键 非空 自增
		name	
		password
		photo
		money
步骤:
	1)建立连接
		数据库地址
		用户名
		密码
		数据库名
	2)执行SQL语句
		插入数据:
			INSERT INTO `users`(`id`, `name`, `password`, `photo`, `money`) VALUES ([value-1],[value-2],[value-3],[value-4],[value-5])
			INSERT INTO `users`(`id`, `name`, `password`, `photo`, `money`) VALUES ("1","xx","123","c:\\photo\\1.jpg","99999")
	3)断开连接

在这里插入图片描述
在这里插入图片描述
创建数据表
在这里插入图片描述
在这里插入图片描述
查看创建成功
在这里插入图片描述
在这里插入图片描述
插入数据:
在这里插入图片描述
然后再重新插入一条:
在这里插入图片描述
点击插入数据这行字的下方图片中的select *,然后执行,
在这里插入图片描述
 

相关函数:
	mysqli_connect();
	连接指定的mysql服务器
		$link = mysqli_connect($host,$user,$password,$database,$port);
	连接时错误的提示
		mysqli_connect_error ();		# 捕获错误信息
	关闭与mysql服务器的连接
		mysqli_close($link);

源码:

<?php
$dbHost = "127.0.0.1";		# 数据库地址
$dbUser = "root";			# 用户名
$dbPass = "root";			# 密码
$dbName = "xnfh";			# 数据库名
$link = @mysqli_connect($dbHost,$dbUser,$dbPass,$dbName);		# @符号作用是屏蔽这行报错
if(!$link){
	echo mysqli_connect_error();		# 捕获错误信息,比如说当上述用户名错误时,会有提示信息
}
$sql = "select * from users";
$results = mysqli_query($link,$sql);# $link可以理解为进入数据库的令牌,调用mysqli_query函数来执行sql语句
var_dump($results);

mysqli_close($link);		# 关闭数据库连接
?>

得到结果集对象:
在这里插入图片描述
上述源码优化,并获取具体的结果集对象:

<pre>
<?php
$dbHost = "127.0.0.1";		# 数据库地址
$dbUser = "root";			# 用户名
$dbPass = "root";			# 密码
$dbName = "xnfh";			# 数据库名
$link = @mysqli_connect($dbHost,$dbUser,$dbPass,$dbName);		# @符号作用是屏蔽这行报错
if(!$link){
	# echo mysqli_connect_error();		# 捕获错误信息,比如说当上述用户名错误时,会有提示信息
	die(mysqli_connect_error());		# die的添加是为了防止报错时,程序不往下执行
}
$sql = "select * from users";

# $link可以理解为进入数据库的令牌,调用mysqli_query函数来执行sql语句
if($results = mysqli_query($link,$sql)){
	# var_dump($results);		# 结果集对象
	/**
	$r1 = mysqli_fetch_assoc($results); 		# 读取结果集对象内容,执行一次读取一行
	var_dump($r1);
	$r2 = mysqli_fetch_assoc($results);		# 读取第二行
	var_dump($r2);
	**/
	// 循环遍历
	while($r = mysqli_fetch_assoc($results)){		# 并不是死循环,当结果集对象内容没有的时候就停止了
		var_dump($r);
	}
}else{
	die(mysqli_error($link));
}

mysqli_close($link);		# 关闭数据库连接
?>

网页界面:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值