zoukankan      html  css  js  c++  java
  • Session

    Session:

    • 是服务端的一个键值对
    • 内部机制依赖于cookie

    1、分类

    Django中默认支持Session,其内部提供了5种类型的Session供开发者使用:

    • 数据库(默认)
    • 缓存
    • 文件
    • 缓存+数据库
    • 加密cookie

    配置方式不同,操作方式相同

    2、配置(settings.py)

    2.1 数据库Session

    Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。

     1 配置 settings.py
     2  
     3     SESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 引擎(默认)
     4      
     5     SESSION_COOKIE_NAME = "sessionid"                       # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
     6     SESSION_COOKIE_PATH = "/"                               # Session的cookie保存的路径(默认)
     7     SESSION_COOKIE_DOMAIN = None                             # Session的cookie保存的域名(默认)
     8     SESSION_COOKIE_SECURE = False                            # 是否Https传输cookie(默认)
     9     SESSION_COOKIE_HTTPONLY = True                           # 是否Session的cookie只支持http传输(默认)
    10     SESSION_COOKIE_AGE = 1209600                             # Session的cookie失效日期(2周)(默认)
    11     SESSION_EXPIRE_AT_BROWSER_CLOSE = False                  # 是否关闭浏览器使得Session过期(默认)
    12     SESSION_SAVE_EVERY_REQUEST = False                       # 是否每次请求都保存Session,默认修改之后才保存(默认)
    13  
    View Code

    2.2 缓存Session

     1 配置 settings.py
     2  
     3     SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # 引擎
     4     SESSION_CACHE_ALIAS = 'default'                            # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
     5  
     6  
     7     SESSION_COOKIE_NAME = "sessionid"                        # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串
     8     SESSION_COOKIE_PATH = "/"                                # Session的cookie保存的路径
     9     SESSION_COOKIE_DOMAIN = None                              # Session的cookie保存的域名
    10     SESSION_COOKIE_SECURE = False                             # 是否Https传输cookie
    11     SESSION_COOKIE_HTTPONLY = True                            # 是否Session的cookie只支持http传输
    12     SESSION_COOKIE_AGE = 1209600                              # Session的cookie失效日期(2周)
    13     SESSION_EXPIRE_AT_BROWSER_CLOSE = False                   # 是否关闭浏览器使得Session过期
    14     SESSION_SAVE_EVERY_REQUEST = False                        # 是否每次请求都保存Session,默认修改之后才保存
    15  
    View Code

    2.3 文件Session

     1 配置 settings.py
     2  
     3     SESSION_ENGINE = 'django.contrib.sessions.backends.file'    # 引擎
     4     SESSION_FILE_PATH = None                                    # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()                                                            # 如:/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/T
     5  
     6  
     7     SESSION_COOKIE_NAME = "sessionid"                          # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串
     8     SESSION_COOKIE_PATH = "/"                                  # Session的cookie保存的路径
     9     SESSION_COOKIE_DOMAIN = None                                # Session的cookie保存的域名
    10     SESSION_COOKIE_SECURE = False                               # 是否Https传输cookie
    11     SESSION_COOKIE_HTTPONLY = True                              # 是否Session的cookie只支持http传输
    12     SESSION_COOKIE_AGE = 1209600                                # Session的cookie失效日期(2周)
    13     SESSION_EXPIRE_AT_BROWSER_CLOSE = False                     # 是否关闭浏览器使得Session过期
    14     SESSION_SAVE_EVERY_REQUEST = False                          # 是否每次请求都保存Session,默认修改之后才保存
    15  
    View Code

    2.4 缓存+数据库Session

    1 数据库用于做持久化,缓存用于提高效率
    2  
    3 配置 settings.py
    4  
    5     SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'        # 引擎
    6  
    View Code

    2.5 加密cookie Session

    1 配置 settings.py
    2      
    3     SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'   # 引擎
    View Code

    3、使用

     1 使用
     2  
     3     def index(request):
     4         # 获取、设置、删除Session中数据
     5         request.session['k1']
     6         request.session.get('k1',None)
     7         request.session['k1'] = 123
     8         request.session.setdefault('k1',123) # 存在则不设置
     9         del request.session['k1']
    10  
    11         # 所有 键、值、键值对
    12         request.session.keys()
    13         request.session.values()
    14         request.session.items()
    15         request.session.iterkeys()
    16         request.session.itervalues()
    17         request.session.iteritems()
    18  
    19  
    20         # 用户session的随机字符串
    21         request.session.session_key
    22  
    23         # 将所有Session失效日期小于当前日期的数据删除
    24         request.session.clear_expired()
    25  
    26         # 检查 用户session的随机字符串 在数据库中是否
    27         request.session.exists("session_key")
    28  
    29         # 删除当前用户的所有Session数据
    30         request.session.delete("session_key")
    31  
    32         request.session.set_expiry(value)
    33             * 如果value是个整数,session会在些秒数后失效。
    34             * 如果value是个datatime或timedelta,session就会在这个时间后失效。
    35             * 如果value是0,用户关闭浏览器session就会失效。
    36             * 如果value是None,session会依赖全局session失效策略。
    View Code

    4、扩展:Session用户验证

    1 def login(func):
    2     def wrap(request, *args, **kwargs):
    3         # 如果未登陆,跳转到指定页面
    4         if request.path == '/test/':
    5             return redirect('http://www.baidu.com')
    6         return func(request, *args, **kwargs)
    7     return wrap
  • 相关阅读:
    [转]对Lucene PhraseQuery的slop的理解
    Best jQuery Plugins of 2010
    15 jQuery Plugins To Create A User Friendly Tooltip
    Lucene:基于Java的全文检索引擎简介
    9 Powerful jQuery File Upload Plugins
    Coding Best Practices Using DateTime in the .NET Framework
    Best Image Croppers ready to use for web developers
    28 jQuery Zoom Plugins Creating Stunning Image Effect
    VS2005 + VSS2005 实现团队开发、源代码管理、版本控制(转)
    禁止状态栏显示超链
  • 原文地址:https://www.cnblogs.com/horror/p/9477976.html
Copyright © 2011-2022 走看看