cookie和session资料整理

鉴于自己有时会不太理解cookie和session区别,这里统一做一下整理,有描述不足的地方,请各位指正

背景

http协议中并无用户多次访问之间规则,也就是说,多次访问,身份上都是毫无关联的,服务器是无法得知哪次才是你,故由此产生了cookie和session,浏览器实际确认用户身份是用cookie,而session则是cookie的加密版

cookie

**目的:**让多次访问之间,服务器能够识别出来

**定义:**当用户访问网站时,可以在浏览器端记录一小段内容,每次访问时,在访问数据头部都带上该段cookie内容提交给服务器,这样子服务器便可以根据cookie来判定用户身份

**特性:**cookie对象既可以在浏览器端访问,也可以在服务器端访问,

浏览器端读取 :document.cookie=""
服务器端写入:response.set_cookie(“key”,value)
服务器端读取:request.cookies.get(‘key’)

@app.route("/test_cookie")
def test_cookie():
    #从服务器端读取cookie值
    username = request.cookies.get("username")
    #创建一个response对象
    response = make_response("<b>"+str(username)+"</b>")
    #服务器端设置cookie值
    response.set_cookie("number", "10")
    return response

@app.route("/test_cookie2")
def test_cookie2():
    # 从服务器端读取cookie值,如果没有则置为0
    number = request.cookies.get("number","0")
    number = int(number)+1

    # 创建一个response对象
    response = make_response("<b>number="+str(number)+"</b>")
    # 服务器端设置cookie值
    response.set_cookie("number", str(number))
    return response

session

背景:由于cookie对象可以在浏览器端通过js修改和查看,存在安全隐患,故不能直接通过cookie完成用户识别

session可能隐患:直接将cookie内容加密,如果加密方式暴露,同样有安全问题,将敏感信息存在服务器端,在浏览器端存储一个加密的会话id,如果该id丢失,同样会造成安全问题

from flask import session#1、app.py中导入session

app.secret_key = "123456"#2、设置session秘钥

@app.route("/test_session")
def test_session():
    try:
        session['number'] += 1
    except:
        session['number'] = 0
    return "number="+str(session['number'])

#浏览器查看cookie中number,发现其前端已经被加密(这里需要自己通过flask或Django对应部署展示的网页才能展示)
浏览器头部
#密码加密部分代码

#先进入python命令行
>>> from hashlib import sha1
>>> password = sha1(b"123456")
>>> password
<sha1 HASH object @ 0x000001B199123418>
>>> password.hexdigest()
'7c4a8d09ca3762af61e59520943dc26494f8941b'

#注册加密部分代码

from flask import session
user_app.secret_key = "123456"
#注册页
@user_app.route('/register', methods=['get', 'post'])
def register():
    message = None
    if request.method == "POST":

        if validate_username(request.form['username']):
            return render_template("user/register.html", message="用户名重复")
        username = request.form['username']
        password = request.form['password']
        sex = request.form['sex']
        age = request.form['age']
        print(username, password, sex, age)
        #实例化用户
        user = User(
            username=username,
            password=password,
            sex=sex,
            age=age
        )
        #密码加密
        user.hash_password(password)

        db.session.add(user)#将用户添加到会话
        db.session.commit()#确认提交

    return render_template("user/register.html", message=message)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值