1.はじめに
「セッション」という言葉、ITの世界でよく出てきます。
・Webセッション
・TCPセッション
・ログインセッション
最初にこの言葉を見たとき、私も正直「セッションって何?」「結局何をしているの?」と全くピンときませんでした。(抽象的すぎてイメージできない)
この記事では、そんなセッションの概念をわかりやすく理解するために電気配線の「マルチタップ」に例えながら、
Pythonでサンプルコードを動かして体感するというアプローチで理解してみます。
(例えが間違ってれば、やさしく指摘していただけると喜びます)
2.セッションとは?
IT概念として一定期間のやり取りや状態を保持する単位終了すると、
・リソースが解放される
・状態を保持できることで効率的に処理できる
これを家電で例えると
・毎回コンセントを抜き差しする → 単発リクエスト(状態は残らない)
・マルチタップに差しっぱなし → セッションあり(状態を保持して効率的)
Pythonで体験してみる
・毎回コンセントを抜き差しするイメージ(セッションなし)
import aiohttp
import asyncio
from datetime import datetime
urls = [
"https://jsonplaceholder.typicode.com/users/1",
"https://dog.ceo/api/breeds/image/random"
]
async def fetch(url):
async with aiohttp.ClientSession() as session: # 毎回セッション作成
async with session.get(url) as response:
data = await response.json()
print(f"[{datetime.now()}] 取得完了: {url}")
return data
async def main():
for url in urls:
await fetch(url)
asyncio.run(main())
・毎回新しい接続を作っている
・状態や接続は保持されない
B. マルチタップあり(セッションあり)
import aiohttp
import asyncio
from datetime import datetime
urls = [
"https://jsonplaceholder.typicode.com/users/1",
"https://dog.ceo/api/breeds/image/random"
]
async def fetch(session, url):
async with session.get(url) as response:
data = await response.json()
print(f"[{datetime.now()}] 取得完了: {url}")
return data
async def main():
async with aiohttp.ClientSession() as session: # マルチタップ(セッション)を用意
tasks = [fetch(session, url) for url in urls] # 複数の家電を同時に差すイメージ
await asyncio.gather(*tasks)
asyncio.run(main())
・セッションを通して同じ接続や状態を使い回す
・効率的で、ログイン状態やヘッダーも共有可能
3.まとめ
セッション = 一定期間のやり取りや状態の単位
家電のマルチタップに例えると理解しやすい
Pythonのrequests.Session()は、セッション概念を体感できるサンプル
マルチタップの有無で「効率や状態保持」がどう変わるかを直感的に理解できる