zoukankan      html  css  js  c++  java
  • session和cookie自动登录机制

    cookie的存储

    cookie是浏览器支持的一种本地存储方式。以dict,键值对方式存储。

    {"sessionkey": "123"}

    浏览器会自动对于它进行解析。

    http请求是一种无状态的请求

    用户向服务器发起的两次请求之间是没有状态的。也就是服务器并不知道这是同一个用户发的。

    有状态请求(cookie)

    服务器a发回来的id会放到服务器a的域之下。不能跨域访问cookie。

    使用浏览器随便打开一个网页,然后f12打开。

    比如我使用的Chrome浏览器

    会找到存储在浏览器本地的cookie值

    点击clear all清空所有的cookie f5刷新页面,会发现又把这些cookie值进来。

    如果将用户名和密码直接保存在cookie,可以实现最垃圾最简略版本的自动登录。

    解决cookie放在本地不安全的问题(session)

    用户在第一次请求后,浏览器回复的id既可以是用户的user id。
    也可以一段任意的字符串,我们把它叫做session id

    根据用户名和密码,服务器会采用自己的规则生成session id。这个session id保存在本地cookie。浏览器请求服务器会携带。

    输入用户名 & 密码
    调用 login(), 后端程序会根据用户名密码生成session id。保存在数据库中。
    用户登录之后,需要通过这个session id取出这些基本信息。
    

    Django的默认表中的session表就记录了用户登录时,后端我们Django为用户生成的sessionid

    可以看到session key value 和过期时间。

    我们可以清空这张表的数据。运行项目进行登录。

    此时通过f12查看浏览器在本地存储的session id。可以看到如下图和我们数据库中的一致。

    session_key 发到浏览器叫做session id

    通过session id 用户访问任何一个页面都会携带,服务器就会认识。

    Setting.py中,

    这个app会拦截我们每次的request请求,在request中找到session id,然后去数据表中进行查询。
    然后通过session key 去找到session data。此时直接为我们取出了user。

    在服务器返回浏览器的response中也会直接加上session id

    cookie是浏览器本地存储机制,存在域名之下,存储不安全。
    服务器在返回id时通过规则生成一串字符,并设置了过期时间。存储在服务器端(数据库)




  • 相关阅读:
    day 23 索引
    day 22 全量更新
    day 21 求贫困户
    day20 函数,同比,和基础
    知识点记录
    day 20试题
    day 16面试题
    day 13拉链数据做存储
    day 13 拉链数据批量处理
    一维,二维,三维数组,vector 初始化
  • 原文地址:https://www.cnblogs.com/xfxing/p/9821338.html
Copyright © 2011-2022 走看看