django -之- session

写在前言:
cookies虽然也能完成认证工作,但是cookies是保存在浏览器端数据,所以这就导致这种操作有极强的不安全性。并且通常认证操作的话,需要在cookies中写数据,这就避免不了要写一些敏感的信息。
这样直接就造成了cookies存放数据的不安全性。因此:我们想若是把数据放在服务器端,仅是给客户端cookies写入简单的但足以明确标志的信息,就避免了不安全的问题。
所以就有了session这个东东,此处就跟大家谈谈session。
session(django自带的操作机制)
  Cookie是什么?
	保存在客户端浏览器上的键值对
	缺点:会暴露敏感信息!
  Session是什么?
	是保存在服务器端的数据(类型不确定)<本质是键值对>
	应用:依赖于cookie
	作用:保持会话(Web网站)记录登录状态,用来做信息检测!
	好处:敏感信息不会直接给客户端

PS:在执行语句,创建数据库的过程中,会初始化创建一个叫做django_session的表,用以存放   创建的键值对(已经过加密处理)。也就是说session数据的增,删,查都是通过这张表来操作。 实质:每个用户来访问服务器都会给客户分配一个ID。用户请求访问,服务器端就会将这个访问保存成一份ID唯一的数据(这份数据对应一个独一无二的ID), 这个ID,服务器会通过set cookie 的方式告诉给客户端。然后客户端请求的时候会把这个ID带上,服务端的session就可以和客户端关联起来了。   Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 1、数据库(默认) 2、缓存 3、文件 4、缓存+数据库 5、加密cookie   - session操作: # 获取、设置、删除Session中数据 request.session['k1'] #创建 request.session.get('k1',None) #获取,没值返回none request.session['k1'] = 123 #设置值,不管k1是否有值,都会设置 request.session.setdefault('k1',123) # 设置k1,存在则不设置 del request.session['k1'] #删除session随机字符串对应的值,随机字符串还在。 # 所有键、值、键值对 request.session.keys() request.session.values() request.session.items() request.session.iterkeys() request.session.itervalues() request.session.iteritems() # 用户session的随机字符串(django自动生成的随机字符串) session_key = request.session.session_key # 将所有Session失效日期小于当前日期的数据删除 request.session.clear_expired() # 检查 用户session的随机字符串 在数据库中是否 request.session.exists("session_key") # 删除当前用户的所有Session数据,直接将session数据<随机字符串及对应的值>删除 request.session.delete("session_key") request.session.set_expiry(value) #设置失效时间,以秒为单位。   * 如果value是个整数,session会在些秒数后失效。   * 如果value是个datatime或timedelta,session就会在这个时间后失效。   * 如果value是0,用户关闭浏览器session就会失效。   * 如果value是None,session会依赖全局session失效策略。   - 在settings.py文件中配置session:-------> 需要更改某个配置的话,就直接在配置文件中写这条配置信息即可。 - 数据库: Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。   配置: 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 = True # 是否每次请求都保存Session,默认修改之后才保存(默认)   #False,表示不保存多次请求的session,只以第一次访问是的session为准,再超过最长存在时间之后失效。   #True,只要是在失效时间之内,每次发起请求,服务端都会刷新保存当前创建的session,失效时间重新计算。 - 缓存:   配置: SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎 SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置 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,默认修改之后才保存 - 文件:   配置: SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎 SESSION_FILE_PATH = None # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir() # 如:/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/T 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,默认修改之后才保存 - 缓存+数据库:   数据库用于做持久化,缓存用于提高效率 SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎 - 加密cookie: SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎 梳理:   1. 保存在服务端的数据(本质是键值对)   2. 配置文件中: - 存储位置 - 超时时间、每次刷新更新时间   3. request.session - 增加   可以添加单个值,也可以写成一个字典。   request.session["username"]="xxx";   request.session["userinfo"]={"username":"xxx","sex"="male",...}     - 获取随机字符串对应的内容   v = request.session.get("userinfo");     - 主动设置超时时间 ***

 

posted @ 2017-07-01 23:10  细雨蓝枫  阅读(327)  评论(0编辑  收藏  举报