1. COOKIE
cookie功能介绍
会话控制
浏览网页的时候,使用的是HTTP协议。
客户端发送请求,服务器端返回响应。
COOKIE
- cookie是存储在客户端的一段文本,可以是文件,也可以是字符串。
- 是服务器发送给客户端的,存储在客户端。
- 相当于用户的身份证信息。
- 每次客户端浏览器在发出请求的时候都会携带上cookie。
设置cookie
setcookie("name","value","expire","path","domain","secure","httponly");
name:名称
value:值
expire:过期时间 3600s=1hour
path:cookie的有效路径
domain:cookie的域名(防止把百度的cookie发送给微博的服务器)
secure:为true时,只能在https中使用cookie。
httponly:仅仅通过http协议访问,不能通过JS访问
接收cookie信息
$_COOKIE[]
cookie的注销
setcookie('name',$_COOKIE['name'],time()-3600)//直接写死,让cookie过期,time()表示当前时间
浏览器用JS写入cookie信息
document.cookie=("name=jl")
cookie的安全性
身份证信息放在浏览器端,容易被窃取和欺骗,是不是安全的,放在服务器端比较安全。由此引入了session机制(用户的身份证信息放在服务器端)。
cookie代码简单演示(登录注销功能)
login.php
<?php
if(isset($_POST['submit'])){
if(isset($_POST['username'])&&$_POST['username']=='jl'&&isset($_POST['password'])&&$_POST['password']=='123456'){
if(setcookie("name","jl")){
echo "登录成功,<a href='./index.php'>返回首页</a>";
}else{
echo "cookie设置错误";
}
}else{
echo "用户名或密码错误,<a href='./login.php'>请重新登录</a>";
}
}else{
$htm=<<<HTML
<form action="" method="post">
用户名:<input type="text" name="username" autocomplete='off'><br/>
密码:<input type="password" name="password" autocomplete='off'><br/>
<input type="submit" name="submit" value="登录">
</form>
HTML;
echo $htm;
}
?>
index.php
<meta charset="utf-8">
<h1>刹那芳华论坛</h1>
<?php
if(isset($_COOKIE['name'])){
var_dump($_COOKIE);
echo "欢迎您".$_COOKIE['name'].'!<br/>';
echo "<a href='./logout.php'>注销账户</a>";
}else{
echo "<a href='./login.php'>请登录</a>";
}
?>
logout.php
<?php
setcookie('name',$_COOKIE['name'],time()-3600);//直接写死,让cookie过期,time()表示当前时间
echo "<a href='./index.php'>返回首页</a>";
?>
2. SESSION
SESSION功能介绍
- 依赖COOKIE实现
- Session id存储在浏览器端
- session_start();//开启session机制
- $_SESSION:完成对session数据的读写
- session的注销采用session_destroy()函数注销,session销毁,但是tmp文件没有删除,只是把里面的内容清空,解除与用户名的绑定。
- 安全性:sessionid也存在被窃取的风险,但是如果被窃取后,一个账户注销该sessionid后这个sessionid就失效了,窃取到的这个sessionid就用不了了。cookie如果被注销后,窃取到的cookie还能用。所以注销是一个很重要的功能。
session代码简单演示(登录注销功能)
login.php
<meta charset="utf-8">
<form action="" method="post">
用户名:<input type="text" name="UserName" autocomplete="off"><br/>
密码:<input type="password" name="password"><br/>
<input type="submit" name="submit" value="登录">
</form>
<?php
session_start();//开启session机制,生成的sessionid放在服务器的tmp文件中\phpstudy_pro\Extensions\tmp,session_start一定要顶格写,前面不能有任何输出
?>
<?php
if(isset($_POST['submit'])){
if(isset($_POST['UserName'])&&$_POST['UserName']=='jl'&isset($_POST['password'])&&$_POST['password']='123456'){
$_SESSION['UserName']=$_POST['UserName'];//$_SESSION传入的数据存储在tmp文件中,在服务器端存储。如果销毁session,就是把tmp文件中的这些内容清空
echo "登录成功,<a href='./index.php'>返回首页</a>"
}else{
echo "用户名或密码错误,<a href='./login.php'>请重新登录</a>"
}
}else{
$htm=<<<HTML
<form action="" method="post">
用户名:<input type="text" name="UserName" autocomplete="off"><br/>
密码:<input type="password" name="password"><br/>
<input type="submit" name="submit" value="登录">
</form>
HTML;
echo $htm;
}
?>
index.php
<meta charset="utf-8">
<h1>刹那芳华</h1>
<a href='./login.php'>请登录</a>
欢迎您
注销
<?php
session_start();
?>
<?php
if(isset($_SESSION['UserName'])&&$_SESSION['UserName']=='jl'){
echo "欢迎您!".$_SESSION['UserName']."<br/>";
echo "<a href='./logout.php'>注销用户</a>";
}else{
echo "<a href='./login.php'>请登录</a>";
}
?>
logout.php
<?php
session_start();
session_destroy();//session销毁,但是tmp文件没有删除,只是把里面的内容清空,解除与用户名的绑定
?>