session+cookie简单讲解以及持久化登录实现

本文介绍了如何使用PHP实现持久化登录,讲解了session和cookie的工作原理,包括它们在登录验证和用户身份识别中的应用。通过设置cookie存储session ID,实现用户在不同页面间的登录状态保持,同时讨论了安全性问题和注销流程。
摘要由CSDN通过智能技术生成

前言

上次实现了一个最简单的登录功能,用到了mysql和php。【最简单的网页登录注册功能讲解及其实现】,今天来进一步编写登录后续的操作,注意本篇博客的内容基于上一篇博客。我们将在此基础上,实现持久化登录以及用户的身份识别。

持久化登录介绍

http是一种无状态协议,这意味着你在a页面登录,然后访问同一站点的b页面,b页面并不会知道你已经登录了,这是坏的。

持久化登录顾名思义,就是登录一次,终身有效,这样非常方便。我们知道一般的网站登录都会有以下几个特征:

  1. 只用登录最初的一次,之后都可以直接登录
  2. 在不同页面跳转,不用重新登录
  3. 任意页面都能够正确识别登录的用户是谁

我们希望实现以上的功能,我们第一个想法就是每个页面都设置登录验证,这样对程序员来说实现起来非常方便,但是用户体验非常曰狗,我们希望尽可能减少用户输入密码的次数。

那么让用户在请求的时候,携带一些信息吧,这些信息保存在用户本地磁盘,能够表示用户的偏好,或许也能够表示用户的身份

这就是cookie的概念,cookie顾名思义,减少用户的麻烦,给用户“甜头”,使得无状态的http协议具有一定的记忆性,接下来介绍cookie。

cookie

cookie介绍

cookie由服务端下发,即请求返回时,服务器在http头中写入cookie信息。

cookie存放于用户的磁盘中,每个站点都有其专属的cookie,每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie,即http的包头都会带上cookie,而后台服务程序也可以接受相应的cookie,并且做出判断。

在这里插入图片描述

cookie携带账号密码?

通过cookie携带账户与密码,我们可以不用输入密码,就将信息传给后台,但是这面临问题:

  1. 如果发生页面跳转,会频繁查询用户账户数据库,带来开销
  2. 频繁的传输账号密码,信息泄露的风险增加了

cookie存储登录标志?

我们通过cookie存储一个数字,如果是0表示未登录,而如果是1表示登录,这样每次页面跳转,都检查cookie不就好了?可是这么做同样有两个问题:

  1. cookie存在于客户端磁盘,用户可以篡改cookie,比如把cookie改成1强行登录
  2. 无法通过简单的状态判断用户的身份,因为无论是a用户还是b用户登录,他们的cookie值都是1

因为登录状态存在于客户端,这是不安全的,我们希望有一些存在于服务器上的信息,这样远程用户不可以篡改这些信息,安全性提高了,这就有了session的概念

session

session简介

session又名会话,是一种存在于服务器内存中的【容器】,一个session类似一张map,可以存储【键值对】,通过键找到值的容器。
在这里插入图片描述
每个session都有独立的id,这些id不重复,我们称之为session id,它唯一地标识了session。

一个session可以简单的理解成【和浏览器对应的容器】,每个浏览器仅可以开启一个session,不同的浏览器请求页面,服务器php代码中的session_start()函数会启动不同的session。下面介绍session的生存周期

session的生存周期

  1. 从用户请求页面开始,建立session
  2. 用户访问同一站点的不同页面,session一直存在且只存在一个
  3. 用户关闭浏览器,用户丢失session
  4. session仍然存在于服务器上,服务器并未丢失session,除非服务器程序重启
  5. 太久未修改的session,会被服务器垃圾删除

session描述了“会话”的概念,即在不同的页面中跳转,客户端与服务器的会话,始终对应到一个session

session存储登录标志?

我们知道,session是存在于服务器的,那么可以用session来存储用户是否登录的信息。每次页面跳转时,查询session中的信息,然后就可以知道用户是否登录了。可是这么做仍然无法标识用户的身份,因为不管是张三还是李四登录,他们的session中的信息都是“登录状态:已登录”

cookie+session存储用户信息以区分用户

我们需要利用session的特性,我们存储用户的信息在每个用户的session中

  1. 我们存储用户的用户名在对应的session中
  2. 我们下发一个cookie,这个cookie的内容是session id,即session的唯一标识
  3. 用户每次页面跳转请求,cookie中带上session id,我们就可以通过session id找到对应的session,进而区分不同的用户。

值得注意的是,因为cookie是我们下发的,用户无法伪造,而session是存储于服务端的,用户也无法修改其内容。这样保证了一定的安全性。

如下图描述了第一次登录时,服务器创建session以及返回cookie的过程
在这里插入图片描述
下图描绘了后面的若干次页面跳转,无需再次登录,服务器通过cookie中的session id 验证用户登录状态以及区分用户身份
在这里插入图片描述

注销

注销的时候,因为我们知道当前用户对应的时哪一个session,我们关闭对应的session,然后销毁用户的cookie即可。

代码实现

实现思路

首先来看初次登录,我们需要有以下几个步骤

  1. 登录页面提交用户输入给后台登录验证程序
  2. 验证程序通过验证,创建session
  3. 下发session id 作为cookie
  4. 登录页面跳转到登录成功页面
  5. 登录成功页面利用cookie中的session id 找到对应session中的用户身份信息
  6. 登录成功页面打印【欢迎 + 用户名】
  • 13
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值