session与cookies的理解

我的职业生涯,先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".

Paste_Image.png

登陆后,在main.php页面可以看到cookies里面有sessionid

Paste_Image.png

刷新main.php,查看network, request发送cookie PHPSESSID. 服务器端会检验PHPSESSID,如果相等,session保持。

Paste_Image.png

把cookies清空,再请求,跳转login.php,PHPSESSID检验失败,session失效,跳转login.php

Paste_Image.png

登陆后,用户关闭浏览器,再次打开"login.php",会跳转main.php,session依然保持。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在网站使用nginx+php做负载均衡情况下,同一个IP访问同一个页面会被分配到不同的服务器上,如果session...
    dreamer_lk阅读 1,069评论 2 9
  • HTTP cookie(也称为web cookie,网络cookie,浏览器cookie或者简称cookie)是网...
    留七七阅读 18,212评论 2 71
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,259评论 19 139
  • 到中午12点半还有一刻钟的时间,看完门诊最后一位病人。顺便拿了一份门诊便当,走出门诊区,拿起口袋里的电话,熟练的按...
    涵龜阅读 339评论 0 1
  • 诗/雪伦 我们在时间里流浪 用公式计算欲望 我们从来不能在白日里望见星空 所以只能在黑夜里迷茫 风来了 你却倔强的...
    雪伦阅读 284评论 7 5