[44]session 세션 관리

8072 단어 python 선행자
세션 세션은 쿠키와 함께 세션 추적 기술이라고 불리는데 주로 서버에 저장된 세션 데이터와 클라이언트 브라우저의 쿠키 데이터를 통해 사용자가 서버에 접근하는 발자국 기록을 완성한다.

1. 회화란 무엇입니까


세션session은 일반적으로 클라이언트 브라우저가 열린 후에 처음으로 서버에 접근할 때 서버는 이 브라우저 클라이언트의 정보를 기록하고 서버의session 공간에 저장합니다. 세션 설정!
사용자가 열려 있는 브라우저가 완전히 닫히지 않은 경우 (모든 탭 닫기) 세션이 유지되며 서버에 액세스하는 동안 현재 세션이 계속 사용됩니다.브라우저를 완전히 닫았을 때 클라이언트의session이 효력을 잃으면 세션이 효력을 잃는 것입니다.
세션은 일반적으로 사용자가 서버에 접근하는 과정에서 빈번하게 접근하는 데이터를 저장하거나 접근하는 과정에서 상태 데이터를 기록하는 데 사용된다. 예를 들어 사용자의 로그인 상태를 기록하는 등

2. tornado의 세션


tornado에서는 기본적으로 세션 동작을 지원하지 않습니다. 보통 쿠키나 보안 쿠키를 통해 세션 관리를 할 수 있습니다.
그러나 어떤 경우에session 조작은 데이터를 편리하게 처리하고 쿠키 위조와 같은 공격을 예방할 수 있다는 것을 부인할 수 없기 때문에tornado에서session 세션 관리가 나타나기를 기대한다.
Congratulaions!tornado에서 우리는 제3자 모듈을 통해 세션 작업을 완성하고 tornado에서는 우리가 이전에 배운 캐시 데이터베이스 redis와 pycket 모듈을 결합하여 완성한다

3. 세션 작업


우선 컴퓨터에 필요한 모듈을 설치합니다. 여기는 주요 모듈pycket을 설치해야 합니다. 이 모듈은session의 주요 조작을 봉인합니다. 모듈에 봉인된 데이터를 저장하는 엔진 대상입니다. 우리는 캐시 데이터베이스redis,so를 선택합니다. 당신의 컴퓨터에도 redis 캐시 데이터베이스를 설치해야 합니다.
PS:redis 캐시 데이터베이스 섹션은 데이터베이스 섹션 문서를 참조하십시오.
#  pycket 
> pip install pycket

pycket 모듈을 설치하면 이 모듈의 SessionMixin 클래스를 통해session 관리 작업을 할 수 있습니다.
주로 두 개의 조작 단계로 나뉜다
  • 자신을 통해.session.set (name,value) 값을 self를 통해 설정합니다.session.get (name) 값을 가져옵니다
  • 응용 프로그램에 pycket 설정을 추가하여 데이터 저장 엔진의 설정을 완성합니다

  • 상간품:
    # -*- coding:utf-8 -*-
    
    from tornado.web import Application, RequestHandler
    from tornado.ioloop import IOLoop
    from pycket.session import SessionMixin
    
    
    class IndexHandler(RequestHandler, SessionMixin):
        def get(self):
            self.session.set("login", self.get_argument("name"))
            self.write("index get ok!")
    
    
    class DetailHandler(RequestHandler, SessionMixin):
        def get(self):
            name = self.session.get("login")
            self.write("detail get ok! %s" % name)
    
    
    if __name__ == "__main__":
        import base64, uuid
    
        cookie_secret = base64.b64encode(uuid.uuid4().bytes)
    
        app = Application(
            [(r"/", IndexHandler),
             (r"/detail", DetailHandler)],
            cookie_secret=cookie_secret,
            pycket={
                "engine": "redis",
                "storage": {
                    "host": "localhost",#  redis 
                    "port": 6379,#  
                    "max_connections": 2**64#  
                },
                "cookies": {
                    "expires_days": 2 #  
                }
            }
        )
        app.listen(8888)
        IOLoop.current().start()
    

    4. 테스트 실행


    브라우저 열기, 액세스http://localhost:8888, IndexHandler의 get() 메서드를 자동으로 호출하여 세션에 데이터를 저장합니다.
    브라우저 주소 표시줄에 다음을 다시 입력합니다.http://localhost:8888/detailDetailHandler 처리 클래스에 액세스하여 세션에 저장된 데이터를 가져옵니다.

    좋은 웹페이지 즐겨찾기