一: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); # 关闭数据库连接
?>
网页界面: