用户模块知识点
本节实战内容 实现用户注册及登录功能,涉及cookie及session知识点
cookie
cookie 是由服务器发送到浏览器的变量。
setcookie(name,value,expire,path,domain,secure)
name 必需。规定 cookie 的名称。
value 必需。规定 cookie 的值。
expire 可选。规定 cookie 的有效期。
path 可选。规定 cookie 的服务器路径。
domain 可选。规定 cookie 的域名。
secure 可选。规定是否通过安全的 HTTPS 连接来传输 cookie。
//设置
setcookie("key","val", time()+3600*24,"/");
setcookie("key","val", time()+3600*24,"/","school.com");
//删除
setcookie("key","val", time()-1,"/");
//读取
$_COOKIE["key"];
session
session 变量用于存储有关用户会话的信息,或更改用户会话的设置
它包含两部分:1.PHPSESSID 存储在用户cookie中 2.具体的值 存储到服务器中
使用session必须先开启
session_start();
$_SESSION["key"]="val";
unset($_SESSION["key"]);
user表
CREATE TABLE `sky_user` (
`userid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(32) NOT NULL DEFAULT '',
`nickname` varchar(32) NOT NULL DEFAULT '',
`password` varchar(32) NOT NULL DEFAULT '',
PRIMARY KEY (`userid`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
<?php
session_start();
$a=isset($_GET["a"])?htmlspecialchars($_GET["a"]):"index";
require "db.class.php";
$user=new User($db);
$user->$a();
class User{
public $db;
public function __construct($db){
$this->db=$db;
}
public function Index(){
$this->tokenLogin();
require "tpl/index.php";
}
public function Login(){
require "tpl/login.php";
}
public function LoginSave(){
$username=$_POST["username"];
$password=$_POST["password"];
if(empty($username) ){
$msg="用户名不能为空";
require "tpl/msg.php";
exit;
}
$row=$this->db->getRow("select * from sky_user where username='".$username."' ");
if(!$row){
$msg="用户名{$username}不存在";
require "tpl/msg.php";
exit;
}
if(md5($password)!=$row["password"] ){
$msg="账户密码出错";
require "tpl/msg.php";
exit;
}
$msg="登录成功";
$_SESSION["ssuser"]=array(
"userid"=>$row["userid"],
"nickname"=>$row["nickname"]
);
//实现记住账号功能
$token=$row["userid"].".".md5($row["userid"].$row["password"]);
setcookie("ssToken",$token,time()+3600*24,"/");
require "tpl/msg.php";
}
public function tokenLogin(){
if(!isset($_SESSION["ssuser"])){
if(isset($_COOKIE["ssToken"])){
$token=$_COOKIE["ssToken"];
$arr=explode(".",$token);
$row=$this->db->getRow("select * from sky_user where userid='".intval($arr[0])."' ");
if($arr[1]==md5($row["userid"].$row["password"])){
$_SESSION["ssuser"]=array(
"userid"=>$row["userid"],
"nickname"=>$row["nickname"]
);
}
}
}
}
public function register(){
require "tpl/register.php";
}
public function registerSave(){
$username=$_POST["username"];
$nickname=$_POST["nickname"];
$password=$_POST["password"];
$password2=$_POST["password2"];
if(empty($username) || empty($nickname)){
$msg="用户名或者昵称不能为空";
require "tpl/msg.php";
exit;
}
$row=$this->db->getRow("select * from sky_user where username='".$username."' or nickname='".$nickname."' ");
if($row){
$msg="用户名或者昵称已经存在";
require "tpl/msg.php";
exit;
}
if($password!=$password2){
$msg="两次密码输入不一致";
require "tpl/msg.php";
exit;
}
$sql="insert into sky_user set
username='".$username."',
nickname='".$nickname."',
password='".md5($password)."'
";
$this->db->insert($sql);
$msg="注册成功";
require "tpl/msg.php";
exit;
}
public function loginOut(){
unset($_SESSION["ssuser"]);
setcookie("ssToken",0,time()-10,"/");
$msg="注销成功";
require "tpl/msg.php";
}
}