引出问题
看一个问题: 我是谁?
比如说: 我们需要看自己的注册信息,即用户表的自己的信息
别人不能看我的,我也不能看别人的
连上mysql,查询数据,地址栏传参,传user_id
根据user_id,查询用户信息,
思考: 如果我的user_id是5,我在地址栏上输入5,看到自己的信息
但是如果把user_id该成6,那不是看到别人的信息
<?php
$conn = mysqli_connect('localhost','root','','bool');
print_r($conn);
$sql = 'use bool';
mysqli_query($conn,$sql);
$sql = 'set names utf8';
mysqli_query($conn,$sql);
$user_id = $_GET['user_id'];
$sql = 'select * from user where user_id ='.$user_id;
$rs = mysqli_query($conn,$sql);
var_dump($rs);
print_r(mysqli_fetch_assoc($rs));
如何才能只看自己的?
设置cookie--setcookie
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<form action="cookie-session2.php">
u: <input type="text" value="username" name="username"></input>
p: <input type="text" value="password" name="password"></input>
<input type="submit" value="登录"></input>
</form>
</body>
</html>
cookie-session2.php
<?php
header("Content-type:text/html;charset=utf8");
/*setcookie parm2*/
echo "ime 给你一个牌子";
setcookie("user","ime");
/*setcookie parm3
第三个参数,是cookie的有效时间,单位是时间戳,以毫秒为单位
*/
setcookie('age','23',time()+10); //10s 消失
//parm4 设置cookie生效的路径 '/' 代表根目录
setcookie('age','23',time()+3600,'/'); //10s 消失
/*
常识: cookie 不可跨域名
但是可以在一个域名的二级子目录下访问
需要第五个参数设置
setcookie(key,value,time()+3600,'/','.sina.com.cn');
这个cookie可以在 book.sina.com.cn 下使用
cookie的失效,只需要把时间设置为
setcookie(key,'',0);
*/
echo "ok";
读取cookie
<?php
header("Content-type:text/html;charset=utf8");
//查看你的牌子,读cookie
print_r($_COOKIE);
echo '你是'.$_COOKIE['user'];
echo '今年'.$_COOKIE['age'];
设置session
<?php
// 开启session 如果不开启的话,是不会把sessionId发送到客户端的
session_start();
$_SESSION['user'] = 'liudehua';
$_SESSION['school'] = 'PKU';
/*
$_SESSION['test'] = array('中','华','人');
class Dog {
public $leg = 4;
}
$dog = new Dog();
$_SESSION['dog'] = dog;
echo "ok";
cookie只能存储字符串/数字这样的标量数据
而session还可以存储数组/对象 (除了资源型,其他7种都可以)
PHP_incomplete CLASS
请注意: 如果你把对象存储到session里
那么另一个读取session的页面,也必须有此对象对应的类声明
否则,从session里分析出一个对象,却没有与之对应的类,则会提示:
__PHP_Incomplete_Class Object
解决: 只需要在需要读取的文件中声明该类也可以
*/
删除session
<?php
session_start();
/*
销毁session
sessionId为文件名,内容存在其中
*/
//1.可以单独销毁某个一单元,即把$_SESSION数组里的某个单元unset掉
//unset($_SESSION['user']);
//2.可以整体把箱子给清空,即_SESSION数组给清空
//$_SESSION = array();
//3.利用函数把箱子整体清空,效果同第二种,
//session__unset();
//4.彻底把session清除,包括以sessionId为名的文件被删除
session_destroy();
/*
我们知道,一个session,有2个方面的数据共同发挥作用
1.客户端的session文件
2.服务器端的session 文件
要想让session失效,也是要从这两个角度来考虑,
在php.ini 里,如下选项,控制sessionid的cookie的生命周期
session.cookie_lifetime = 15 以秒为单位
session.cookie_lifetime = 0 //则浏览器关闭就失效
注意: 如果用户篡改了cookie,让cookie的生命周期为1年,那你也判断不出来
如果想严格的让session就半个小时有效,可以这样:
$_SESSION['time'] = 登录时的时间戳
校验session的开启时间!
*/
/*
session的有效路径
session的有效,取决于cookie
cookie在哪儿有效,session自然就能读到
php如下选项: 指定了sessionid这个cookie的有效路径是 / (根目录)
自然session无论在多深的目录下设置,而session在整站有效
session.cookie_path = /
*/