본문 바로가기
개발자의 개발개발한 하루

Python Flask Session 유지 및 현재 Login id값 가져오기

by ju니어 2021. 5. 29.
728x90
반응형

Python Flask에서 사용자 회원가입과 로그인을 하는 서버를 구축하였다.

이후 현재 로그인한 계정으로 데이터를 전송하고자 하였는데, 이 때 사용자가 로그인한 id가 필요로 하다.

Python Flask에서는 로그인 한 현 상태의 id를 어떻게 가져오는지 알아보던 중, "Session"을 통해 알아낸다고 하였다.

 

 

호스트 프로세스 간에 세션을 생성하고 유지, 종료 등을 담당한다. 즉 로그인과 로그아웃, 동기화 같은 서비스를 담당한다는 의미이다.

세션과 관련된 데이터는 서버에 저장이 되는데. 이 때 가장 많이 비교 되는 대상이 쿠키이다.

 

 

Cookie와 Session의 비교는 아래와 같다.

  Cookie Session
저장위치 Client
(클라이언트의 웹 브라우저가 지정하는 Memory or HDD)
Server
저장형식 Text Object
만료시점 쿠키 저장시 설정
(설정 없으면 브라우저 종료시)
* 저장할 때 expires 속성을 정의해서 무효화 시키면 삭제될 날짜를 직접 정할 수 있음
정확한 시점 모름
(클라이언트가 로그아웃하거나, 설정 시간 동안 아무 반응이 없으면 무효화 되기 때문에 정확한 시점을 알 수 없다는 것)
리소스 클라이언트의 리소스
(클라이언트에 저장->메모리 사용, 서버의 자원을 이용하지 않음)
서버의 리소스
(서버에 저장되고 서버의 메모리로 로딩되기에 세션이 생길 때마다 리소스를 차지)
용량제한 한 도메인당 20개, 한 쿠키당 4KB
(클라이언트도 모르게 접속되는 사이트에 의해 설정될 수 있기 때문에 이에 발생하는 위험을 방지하고자 제한)
제한없음
(클라이언트가 접속하면 서버에 의해 생성되므로 제한 없음)

표 출처 : https://gyoogle.dev/blog/web-knowledge/Cookie%20&%20Session.html

 

 

서버에 사용자 로그인 정보가 저장되고 이를 바탕으로 목표로 하는 서비스를 개발하려면 세션을 건드려야 한다는 것을 알 수 있다.

 

Flask에서는 {Key:Value}인 딕셔너리 형태로 세션을 저장하기에, key를 통해 해당 값을 불러올 수 있다.

세션 데이터는 쿠키의 위에 저장되고, 서버는 쿠키에 암호화 방식으로 서명하기에 이 때 암호화를 위해 Flask에서는 세션 관리와 암호화를 위해 secret_key가 필요로 하다.

코드는 아래와 같다. 

 

 

from flask import Flask
from flask import request, jsonify, session, escape
import pymysql
import json

app=Flask(__name__)
app.config["DEBUG"]=True
app.secret_key = "[임의생성]"
config = {
    'host': 'rds.amazonaws.com',
    'port': 3306,
    'user': '[user]',
    'password':'[password]',
    'database': '[database]'
}

# login
@app.route('/login', methods=['GET','POST'])
def login():
    json_data = request.get_json()
    db = pymysql.connect(**config)
    cur = db.cursor()

    print(type(json_data))
    print(json_data, " json_data")

    if json_data:
        sql = '''select id, pwd from user where id = %s and pwd = %s'''
        cur.execute(sql, [json_data['id'], json_data['pwd']])
        data = cur.fetchall()

        db.commit()
        db.close()

        for row in data:
            user_id = row[0]

        if data:
            session['user'] = user_id # user_id를 session에 저장

 

해당 서버를 AWS EC2에 올려놓았기에 POSTMan에서 Json으로 ID와 Password를 보낸다.

Register로 회원가입 후 Login 되는 모습

 

Flask에서 Session과 관련된 사용법은 블로그(클릭 시 이동)를 참고하였다.

 

 

반응형

댓글