session与cookies的理解

2016-12-20  本文已影响33人  荞叶

我的职业生涯,先Java,再JavaScript, 业余搞了一下PHP。最近想重新理解一下session与cookies,后台语言还是PHP的环境最好搭建。

用户登陆功能

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');
<?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");
    }
}
?>
<?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依然保持。

上一篇 下一篇

猜你喜欢

热点阅读