我的职业生涯,先Java,再JavaScript, 业余搞了一下PHP。最近想重新理解一下session与cookies,后台语言还是PHP的环境最好搭建。
用户登陆功能
- 数据库文件
在user表里面存入三个用户,用户名均为"123"
drop database if exists shop;
create database shop;
use shop;
create table user(
id int primary key auto_increment,
username varchar(255),
password varchar(255)
);
/* 密码123*/
insert into user values(null,'sam','202cb962ac59075b964b07152d234b70');
insert into user values(null,'alex','202cb962ac59075b964b07152d234b70');
insert into user values(null,'peter','202cb962ac59075b964b07152d234b70');
login.php
<?php
//如果用户登陆,就跳转到main.php
session_start();
if (isset($_SESSION['user_info'])) {
header("location:main.php");
}
//首次进入页面不检验结果
if (!empty($_POST)) {
$username = trim($_POST['username']);
//加密密码
$password = md5(trim($_POST['password']));
//连结数据库,验证用户名密码是否正确
$mysqli = new mysqli("localhost", "root", "", "shop");
if (mysqli_connect_errno()) {
echo "连接失败" . mysqli_connect_error();
exit();
}
$sql = "select * from user where username ='$username' and password='$password'";
$result = $mysqli->query($sql);
//用户存在
if ($result->num_rows > 0) {
session_start();
//在session里面存入username
$_SESSION["user_info"] = array("username"=>$username);
header("location:main.php");
} else {
header("location:login.php");
}
}
?>
main.php
<?php
//如果用户没有登陆,跳转login.php
session_start();
if (empty($_SESSION['user_info'])) {
header("location:login.php");
}
?>
login.php
用户输入正确的用户名密码,跳转到main.php
. 服务器端开启session,生成key为"PHPSESSID"的session id,发送到客户端,给cookie设置"PHPSESSID".
登陆后,在main.php
页面可以看到cookies里面有sessionid
刷新main.php
,查看network, request发送cookie PHPSESSID. 服务器端会检验PHPSESSID,如果相等,session保持。
把cookies清空,再请求,跳转login.php
,PHPSESSID检验失败,session失效,跳转login.php
登陆后,用户关闭浏览器,再次打开"login.php",会跳转main.php
,session依然保持。
网友评论