Django中session的使用

基于cookie做用户验证时:敏感信息不适合放在cookie中

session依赖cookie

session原理

cookie是保存在用户浏览器端的键值对

session是保存在服务器端的键值对

session服务端中存在的数据为:

session = {
   随机字符串1:{
      用户1的相关信息
   }
   随机字符串2:{
      用户2的相关信息
   }
}

session客户端即客户端的浏览器的cookie中存的数据是当前用户对应的随机字符串

session的工作过程

1、生成随机字符串

2、写到用户浏览器的cookie中

3、保存到session中

4、在随机字符串对应的字典中设置相关内容

而上述过程在Django中的体现为:

request.session["username"] = yang

这里的username为通过request.POST.get("username")从前端html页面中获取到的用户名信息

注意:

在Django中要用session中一定要先执行:

python manage.py makemigrations
python manage.py migrate

当用户登录的时候的就会在数据库的django_session表中记录session信息

同样的通过request.session["username"]也可以获取相应的值

在这个过程中:

1、首先获取当前用户的随机字符串

2、根据随机字符串获取对应的内容

session的操作

request.session["k1"]   # 如果不存在则会报错,为了防止出错可以request.session.get('k1',none)
request.session['k1'] = 123  # 设置session值
request.session.setdefault('k1', 123)  # 存在则不设置
del request.session['k1']   # 删除
python manage.py clearsessions  # 清除session数据库

所有 键、值、键值对

request.session.keys()
request.session.values()
request.session.items()
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")

# 设置session过期时间
request.session.set_expiry(value)

# 默认的过期时间是两周,如果自己设置了过期时间,这样自己设定的优先级就会高于默认的
# 如果value是个整数,session会在些秒数后失效。
# 如果value是个datatime或timedelta,session就会在这个时间后失效。
# 如果value是0,用户关闭浏览器session就会失效。
# 如果value是None,session会依赖全局session失效策略。

配置setting.py

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,默认修改之后才保存(默认)
 

Django中对于session的存储方式

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

1.数据库(默认)

2.缓存

3.文件

4.缓存+数据库

5.加密cookie

1、如果是数据库,需要在settings.py中配置如下:

SESSION_ENGINE = 'django.contrib.sessions.backends.db' (引擎(默认))

2、如果是缓存session,需要在settings.py中配置如下:

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'(引擎)

SESSION_CACHE_ALIAS= 'default'  使用的缓存别名(默认内存缓存,也可以是Memcache或Redis),此处别名依赖缓存的设置

3、如果是文件session, 需要在settings.py中配置如下:

SESSION_ENGINE = 'django.contrib.sessions.backends.file' (引擎)

SESSION_FILE_PATH=None  缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()   

4、如果是缓存+数据库session,需要在settings.py中配置如下:

SESSION_ENGINE='django.contrib.sessions.backends.cached_db'(引擎)

原文转自: https://www.cnblogs.com/zhaof/p/6281468.html