这篇博客实现用户登录验证以及使用cookie登录,它承接了前面的几个博客:
1. php连接mysql实例之新用户注册实现
2. php连接mysql实例之后台列表显示已注册的用户信息
3. php连接mysql实例之删除某条已注册的用户信息
4.php连接mysql实例之修改用户密码
我们先验证用户登陆,然后保存cookie,再次访问时不需要重复输入用户名和密码就可以登录。
首先介绍一下php中设置cookie的方法。
php中提供了一个函数来让我们设置cookie,这个函数是:
bool setcookie (
string
名字[,string
名
字
[
,
s
t
r
i
n
g
值]
[, int
过期时间=0][,string
过
期
时
间
=
0
]
[
,
s
t
r
i
n
g
路径]
[, string
域名][,bool
域
名
]
[
,
b
o
o
l
安全 = false]
[, bool
http只读=false]);参数描述
h
t
t
p
只
读
=
f
a
l
s
e
]
)
;
参
数
描
述
名字 必需。规定 cookie 的名称。
值可选。规定cookie的值。
值
可
选
。
规
定
c
o
o
k
i
e
的
值
。
有效期 可选。规定 cookie 的有效期。
路径可选。规定cookie的服务器路径。
路
径
可
选
。
规
定
c
o
o
k
i
e
的
服
务
器
路
径
。
域名 可选。规定 cookie 的域名。
安全可选。规定是否通过安全的HTTPS连接来传输cookie。
安
全
可
选
。
规
定
是
否
通
过
安
全
的
H
T
T
P
S
连
接
来
传
输
c
o
o
k
i
e
。
http安读 可选。如果true,那么js就无法读取改cookie,增加安全性。
一般来说,我们其实用不到上面那么多参数,对于这个函数,我们一般这么用: setcookie(cookie名,cookie值,cookie有效期);
没错,就那么3个。如此一来,我们就可以在服务端通过$_COOKIE[‘name’] 来读取cookie了。
首先是一个用户登录的HTML文件—-denglu.html
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form action="cookie.php" method="POST">
<div>
用户名:<input type="text" name="username" />
密 码:<input type="password" name="password" />
<input type="submit" value="登录">
</div>
</form>
</body>
</html>
对登录事件做出响应的就是cookie.php——她实现的功能有验证用户名与密码,如果正确则跳转到welcome.html,并切保存cookie。。。当下次需要访问时不必输入用户名和密码即可登录。cookie代码如下:
<?php
//第一次登陆的时候,通过用户输入的信息来确认用户
if ( ( $_POST['username'] != null ) && ( $_POST['password'] != null ) ) {
$userName = $_POST['username'];
$password = $_POST['password'];
//从db获取用户信息
//PS:数据库连接信息改成自己的 分别为主机 数据库用户名 密码
$conn = mysqli_connect('localhost','root','password');
mysqli_select_db($conn,'test');
$sql = "select * from user where username = '$userName' ";
$res = mysqli_query($conn,$sql);
$row = mysqli_fetch_assoc($res);
if ($row['password'] == md5($password)) { //md5(trim($_POST['password']))
//密码验证通过,设置cookies,把用户名和密码保存在客户端
setcookie('username',$userName,time()+60*60*24*30);//设置时效一个月,一个月后这个cookie失效
setcookie('password',$password,time()+60*60*24*30);
//最后跳转到登录后的欢迎页面
header('Location: welcome.php' . "?username=$userName");
}
}
//再次访问的时候通过cookie来识别用户
if ( ($_COOKIE['username'] != null) && ($_COOKIE['password'] != null) ) {
$userName = $_COOKIE['username'];
$password = $_COOKIE['password'];
//从db获取用户信息
//PS:数据库连接信息改成自己的 分别为主机 数据库用户名 密码
$conn = mysqli_connect('localhost','root','password','test');
$res = mysqli_query($conn,"select * from user where username = '$userName' ");
$row = mysqli_fetch_assoc($res);
if ($row['password'] == md5($password)) {
//验证通过后跳转到登录后的欢迎页面
header('Location: welcome.php' . "?username=$userName");
}
}
?>
登录成功后的跳转的welcome页面如下:
<?php
$user = $_GET['username'];
?>
<html>
<head>
</head>
<body>
welcome,<?php echo $user;?>
</body>
</html>
这样,当我第一次访问cookie.php的时候,我需要输入用户名和密码,输入完毕后跳转到了welcome.php。然后我关闭浏览器,再次打开cookie.php,这次没有要求我输入用户信息,而是直接跳转到了welcome.php,因为之前我们存的cookie信息被浏览器自动发送到了服务端,服务端做完处理直接跳转到了welcome.php,服务器认识我们了!知道我是之前那个登陆过的用户,这样我们就通过cookie技术让无状态的HTTP协议保持了状态。
只不过!!!只不过!!!只不过!!!重要的事要说3遍,我们一般是不会把用户名和密码放到cookie中的,因为这并不安全,容易泄露自己的信息,请不要把重要的信息放到cookie中。我们这个只是一个学习cookie的例子。
本人也是菜鸟,也处在学习阶段,代码写的都很粗糙,大牛勿喷,如有错误烦请批评指正。