TIL

Today I Learned. 知ったこと、学んだことを書いていく

Cookieを使う - bottle

bottleでCookieを使う

  • Cookieの保存:response.set_cookie
  • Cookieの取得:request.get_cookie
  • 署名をする(secretを設定する)ことで少しはセキュアになる

Cookieの保存

response.set_cookie('userId', 'tamago', max_age=15552000)

max_ageを設定しないと、ブラウザを閉じてしまうと消えてしまう

Cookieの取得

request.get_cookie('userid')

Cookieの削除

response.delete_cookie('userid')

サンプルコード

以下のようなmain.pyを作成する

max_ageを設定しなかった場合、ブラウザを閉じてしまうとCookieは消えることを確認してみた

from bottle import route, run, response, request


@route('/test1')
def test1():
    # max_ageは設定しない
    response.set_cookie('userId', 'tamago')
    return 'クッキーに保存'

@route('/test2')
def test2():
    return f'クッキーから取得{request.get_cookie("userId")}'

run(host='localhost', port=3000, debug=True, reloader=True)
  1. localhost:3000/test1 にアクセス:Cookieに名前がuserIdで値がtamagoを保存

  2. localhost:3000/test2 にアクセス:「クッキーから取得tamago」が表示

一回、ブラウザを閉じて localhost:3000/test2 にアクセスすると、「クッキーから取得None」が表示される。これは、max_ageを設定していないため消えてしまった

Cookieの署名

Cookieはクライアント側で改変できてしまうため、サーバー側で設定したものかどうかを確認しないといけない。そのために、Cookieを保存、取得するときに署名キーを引数に渡すこと。署名キーが一致しなければ、Noneが返されるようになっている。

secretに署名キーを設定する

# 保存
response.set_cookie('name', 'tamago', secret='secret-key-abc')

# 取得
request.get_cookie('name', secret='secret-key-abc')

Tutorial — Bottle 0.13-dev documentation

参考文献