Cookie和Session

1.0 cookie 与 session

1.1 cookie

  1. cookie :在网站中http 请求是无状态的,当我们第一次访问服务器登录成功后,第二次再去访问,服务器仍然不知道当前请求的是哪个用户
  2. cookie的出现就是为了解决这个问题,第一次登录服务器后,服务器返回一些数据(cookie)给浏览器,然后浏览器保存到本地,这样第二次访问服务器时,用户就会自动的把上次存储的cookie携带上,这样服务器就能通过浏览器携带的cookie知道是哪个用户访问了。
  3. cookie的存储数据量有限,各个浏览器大小略微不一样,但一般不超过4KB.

1.2 session

  1. session:session有点和cookie类似,都是存储用户信息的,不同的是cookie是存储在本地浏览器,session是一个概念,一个思路,一个服务器存储授权信息的解决方案,不同的服务器,不同的语言,不同的框架有不同的实现,虽然实现不一样,但是他们的目的都是为了方便存储数据的,session的出现是为了解决cookie存储数据不安全的问题。
  2. cookie和session结合使用,在如今的市场或者企业一般有两种存储方式
    2.1 - 存储在服务端:
    通过cookie存储一个session_id,具体的数据保存在session中,如果用户已登录,则服务器会在cookie中保存一个session_id,下次请求的时候则会把session.id携带上来,服务器根据session_id在session库中寻找session数据,则知道该用户的信息以及之前保存的状态信息,专业术语叫 server side session,存储在服务器的数据会更加的安全,不容易被窃取,但是存储在服务器也有弊端,就是会占用服务器的资源,但服务器发展至今,存储一些session的信息还是没问题的。
    2.2 - 将session数据加密存储在cookie中,专业术语叫 client side session Flask采用的就是这种方式,不过也可以替换成其他的形式。

2.0 Flask中使用cookie和session

2.1 cookie使用

2.1.1 - 在flask中操作cookie是通过response对象来操作的,可以在response返回之前通过response.set_cookie来设置,有几个参数需要注意:

  1. key : 设置cookie的key
  2. value : key对应的value
  3. max_age : 改cookie的过期时间,如果不设置,关闭浏览器后就会过期
  4. expires : 过期时间,应该是datetime类型
  5. domain : 该cookie在哪个域名中有效,一般设置子域名,如:xms.eplle.com
  6. path : 在哪个路径下有效
from flask import Flask, Response, request

#Respone 设置connkie,
# 当我们的浏览器第一次访问服务器时候,输入用户信息登录前,服务器是无状态的,服务器响应后浏览器会自动创建cookie,
# 当下次在访问时,服务器就不再是无状态的,服务器就知道你是谁了,可以直接访问了
app = Flask(__name__)

@app.route('/')
def index():
    res = Response('淘宝网')
    res.set_cookie('username', 'cheney', max_age=60*60*24)  #max_age设置存活时间1天
    return res

if __name__ == '__main__':
    app.run(debug=True)

2.2 session使用

Flask中session是通过 from flask import session ,然后添加key值和value值即可,并且flask中的session机制是将session信息加密,然后存储在cookie中,专业术语叫client side session。

from flask import Flask, session
import os
from datetime import timedelta
#session 加密

print(os.urandom(12)) #生成十二位随机密钥

app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(12)
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hours=24) #设置session失效时间24小时

@app.route('/')
def indexx():
    #它是一个字典
    session['username'] = 'cheney'
    # 过期时间设置
    session.permanent = True
    return '登录状态'

@app.route('/list/')
def ini():

    username = session.get('username')
    print(username)
    return '宝宝'

@app.route('/logout/')#设置退出session
def logout():
    #删除session
    session.pop('username')
    #进行清屏
    session.clear()

    return '退出登录状态'

if __name__ == '__main__':
    app.run(debug=True)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值