前言做过爬虫的朋友相信对session和cookie都非常熟悉。简单的说,cookie是客户端用来识别用户信息的,而session是一种会话机制,首先我们需要对cookie的整个过程有一个清晰的认识:做过爬虫的都知道浏览器向服务器发起登录请求,登录成功后在ResponseHeaders中有一个cookie。然后这个cookie从服务器生成返回给浏览器,然后登录用户就可以访问其他页面了。例如,您只能在登录淘宝后才能访问您的购物车。这时候就可以访问成功了,因为登录成功后请求带了一个cookie。不熟悉的朋友,可以看一下我之前写的一篇关于免cookie登录的文章,了解更多。那么问题来了,我们如何在服务端或者后台设置cookies和session呢?1.Cookies下面看看如何在Flask中操作cookies。根据以上思路,cookie是从response中获取的,所以我们在Flask返回的response中设置cookie,即make_response。1.1设置cookies这里提一下,Flask把请求相关的一切都封装在了request中。同样,我们可以使用make_response来设置响应相关的数据。fromflaskimportFlask,make_responseapp=Flask(__name__)@app.route('/set_cookie')defhello_world():resp=make_response("success")resp.set_cookie("name","python")resp.set_cookie("name2","go")returnresp上面的代码设置了两个cookie。设置好后,我们启动服务,然后通过浏览器访问地址。按F12后就可以看到你设置的cookie了。可以看到浏览器会自动在响应头中保存cookies,下次访问时会带上这两个cookies。我们用下面的代码来验证一下:fromflaskimportrequest@app.route("/index")defindex():cookie=request.cookiesreturnf"thisis{cookie}"启动后访问http://127.0.0.1:5000/index在请求头中有cookie数据,同时后台可以拿到用户的cookie。1.2Cookie有效期Cookie都有有效期。细心的朋友应该能发现,上面的cookie没有设置有效期,关闭浏览器后,cookie就会失效。在set-cookie中可以使用max_age、expires来设置cookie的有效期,其中max_age的单位是秒,expires是时间戳或者datetime格式的对象数据。我们可以在hello_world上面添加第三个cookie数据@app.route('/set_cookie')defhello_world():resp=make_response("success")resp.set_cookie("name","python")resp.set_cookie("name2","go")resp.set_cookie("name3","jerry",max_age=7200)returnresp也重启并在浏览器输入地址查看cookie1.3删除cookie删除cookie的方法是delete_cookie,我们将删除需要删除的cookie传key即可,@app.route('/delete')defdelete():resp=make_response("deletetest")resp.delete_cookie("name")returnresp验证结果如下:发现没有,createnameTime和expiration是一样的。2.Sessionsession和cookie的作用有点类似,都是存储用户相关的信息,不同的是session是存储在服务器端的,session_id是用来标识用户的。cookie保存在客户端,session的出现就是为了解决cookie保存数据不安全的问题。2.1设置session在flask中,我们可以导入flask.session来操作session。使用方法类似于python中的字典。fromflaskimportsession@app.route("/login")deflogin():session["name"]="jerry"session["account"]="python"return"success"注意在处理session的时候,SECRET_KEY需要设置,因为flask使用这个值来加密和混淆session。classConfig(object):SECRET_KEY="DJFAJLAJAFKLJQ"app.config.from_object(Config())2.2获取session类似于使用字典,可以使用get方法或者直接取值@app.route("/index")defindex():name=session.get("name")returnf"hello{name}"2.3删除会话session.pop("name")delsession["name"]session.clear()whereclear()直接清除所有sessionClear。以上就是今天的全部内容,希望大家喜欢。更多内容请关注我公众号,Python编程与实战
