Django 5種類のSession使用方法解析


紹介する
Session:コンピュータにおいて、特にインターネットアプリケーションでは、「セッション制御」と呼ばれています。Sessionオブジェクトは、特定のユーザセッションに必要な属性および設定情報を記憶する。このように、ユーザがアプリケーションのWebページ間をジャンプすると、Sessionオブジェクトに格納されている変数は失われることなく、ユーザセッション全体に存在し続けることになる。
ユーザがアプリケーションからのWebページを要求すると、そのユーザがまだセッションしていない場合、Webサーバは自動的にSessionオブジェクトを作成する。セッションが失効した場合、または中断された場合、サーバはセッションを終了します。Sessionオブジェクトの最も一般的な使い方は、ユーザーの最初のオプションを記憶することである。
sessionは、cookieに基づいて作成され、ユーザがブラウザを開いてサーバにアクセスすると、サーバは各ユーザのブラウザのためにセッションオブジェクトを作成し、セッションオブジェクトごとにJsessionid番号を作成します。sessionオブジェクトの作成に成功すると、cookie方式でこのJsessionid号をブラウザに返信し、ユーザが再度サーバにアクセスすると、Jsessionid号のcookieデータを持ってサーバにアクセスし、サーバは異なるsessionid号を通じて関連するsessionidオブジェクトを探し出します。異なるセッションオブジェクトを通じて異なるユーザサービスを提供する。
使用
DjangoではデフォルトでSessionをサポートしています。その内部には開発者のための5種類のSessionがあります。
  • データベース(デフォルト)
  • キャッシュ
  • ファイル
  • キャッシュ+データベース
  • 暗号化クッキー
  • データベースセッション
    
    Django    Session,      Session         , :django_session   。
     
    a.    settings.py
     
      SESSION_ENGINE = 'django.contrib.sessions.backends.db'  #   (  )
       
      SESSION_COOKIE_NAME = "sessionid"            # Session cookie         key, :sessionid=     (  )
      SESSION_COOKIE_PATH = "/"                # Session cookie     (  )
      SESSION_COOKIE_DOMAIN = None               # Session cookie     (  )
      SESSION_COOKIE_SECURE = False              #   Https  cookie(  )
      SESSION_COOKIE_HTTPONLY = True              #   Session cookie   http  (  )
      SESSION_COOKIE_AGE = 1209600               # Session cookie    (2 )(  )
      SESSION_EXPIRE_AT_BROWSER_CLOSE = False         #          Session  (  )
      SESSION_SAVE_EVERY_REQUEST = False            #          Session,         (  )
     
     
     
    b.   
     
      def index(request):
        #   、  、  Session   
        request.session['k1']
        request.session.get('k1',None)
        request.session['k1'] = 123
        request.session.setdefault('k1',123) #       
        del request.session['k1']
     
        #     、 、   
        request.session.keys()
        request.session.values()
        request.session.items()
         # 3.0   3   
        request.session.iterkeys()
        request.session.itervalues()
        request.session.iteritems()
     
     
        #   session      
        request.session.session_key
     
        #    Session               
        request.session.clear_expired()
     
        #      session              
        request.session.exists("session_key")
     
        #          Session  
        request.session.delete("session_key")
        request.session.delete()
        request.session.flush()
     
        request.session.set_expiry(value)
          *   value    ,session        。
          *   value  datatime timedelta,session          。
          *   value 0,       session    。
          *   value None,session     session    。
    キャッシュセッション
    a.settings.pyを配置する
    SESSION_ENGINE='django.com ntrib.sessions.backends.c.ache'21853;エンジン
    SESSION_CACHE_ALIAS='default'铅が使用するキャッシュの別名(デフォルトメモリキャッシュ、memcache)は、ここで別名キャッシュの設定に依存します。
    SESSION_COOKIE_NAME=「sessionid」〓Sessionのcookieがブラウザに保存されているときのkey、すなわち:sessionid=ランダム文字列
    SESSION_COOKIE_PATH=「/」〹Sessionのクッキー保存の経路
    SESSION_COOKIE_DOMAIN=None_Sessionのcookieが保存しているドメイン名
    SESSION_COOKIE_SECURE=False〓〓Https伝送cookieかどうか
    SESSION_COOKIE_HTTPONLY=True〓Sessionのクッキーはhttp転送のみ対応しています。
    SESSION_COOKIE_AGE=1209600皘Sessionのクッキー失効日(2週間)
    SESSION_EXPIRE_ATBROWSER_CLOSE=False〓ブラウザが閉じられていますか?Sessionが期限切れになります。
    SESSION_SAVE_EVERY_REQUEST=False〓〓は要求ごとにSessionを保存するかどうか、デフォルトの修正後に保存します。
    b.使用
    同上
    ファイルセッション
    a.settings.pyを配置する
    SESSION_ENGINE='django.com ntrib.sessions.backends.file'sエンジン
    SESSION_FILE_PATH=None葃キャッシュファイルのパスは、Noneであれば、tempfileモジュールを使用して、一時アドレスtempfile.gettempdir()唵
    例えば:/var/folders/d 3/J 9 tj 0 gz 06 bmwxh6_xm 0000 gn/T
    SESSION_COOKIE_NAME=「sessionid」〓Sessionのcookieがブラウザに保存されているときのkey、すなわち:sessionid=ランダム文字列
    SESSION_COOKIE_PATH=「/」〹Sessionのクッキー保存の経路
    SESSION_COOKIE_DOMAIN=None_Sessionのcookieが保存しているドメイン名
    SESSION_COOKIE_SECURE=False〓〓Https伝送cookieかどうか
    SESSION_COOKIE_HTTPONLY=True〓Sessionのクッキーはhttp転送のみ対応しています。
    SESSION_COOKIE_AGE=1209600皘Sessionのクッキー失効日(2週間)
    SESSION_EXPIRE_ATBROWSER_CLOSE=False〓ブラウザが閉じられていますか?Sessionが期限切れになります。
    SESSION_SAVE_EVERY_REQUEST=False〓〓は要求ごとにSessionを保存するかどうか、デフォルトの修正後に保存します。
    b.使用
    同上
    キャッシュ+データベースセッション
    データベースは耐久化のために使用され、キャッシュは効率を高めるために使用されます。
    a.settings.pyを配置する
    SESSION_ENGINE='django.com ntrib.sessions.backends.cached_db菗エンジン
    b.使用
    同上
    暗号化クッキーSession
    a.settings.pyを配置する
    SESSION_ENGINE='django.com ntrib.sessions.backends.signed_クッキーエンジン
    b.使用
    同上
    ログイン状態検証
    
    def login_status(func):
      def warp(request,*args,**kwargs):
        user = request.session.get("username")
        if user:
          kwargs["username"] = user
          return func(request,*args,**kwargs)
        return redirect(login)
      return warp
    以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。