Django-session组件
session是服务器技术,把数据存在服务器上;而Cookie会被客户端浏览器保存起来。
django中session语法
1、设置Sessions值 request.session['session_name'] ="admin" 2、获取Sessions值 session_name = request.session["session_name"] 3、删除Sessions值 del request.session["session_name"] 4、flush() 删除当前的会话数据并删除会话的Cookie。 这用于确保前面的会话数据不可以再次被用户的浏览器访问 5、get(key, default=None) fav_color = request.session.get('fav_color', 'red') 6、pop(key) fav_color = request.session.pop('fav_color') 7、keys() 8、items() 9、setdefault() 10 用户session的随机字符串 request.session.session_key # 将所有Session失效日期小于当前日期的数据删除 request.session.clear_expired() # 检查 用户session的随机字符串 在数据库中是否 request.session.exists("session_key") # 删除当前用户的所有Session数据 request.session.delete("session_key") request.session.set_expiry(value) * 如果value是个整数,session会在些秒数后失效。 * 如果value是个datatime或timedelta,session就会在这个时间后失效。 * 如果value是0,用户关闭浏览器session就会失效。 * 如果value是None,session会依赖全局session失效策略。
def login_session(request): if request.method == 'POST': user = request.POST.get('user') pwd = request.POST.get('pwd') user = UserInfo.objects.filter(user=user, pwd=pwd).first() if user: request.session['is_login'] = True request.session['username'] = user.user import datetime now = datetime.datetime.now().strftime('%Y-%m-%d %X') # 记录上次登陆login-session的时间 request.session['last_visit_time'] = now ''' 1.生成一个随机字符串 5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog 2.response.set_cookie('sessionid',5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog 3.在django_session表中创建一条记录: session-key session-data 5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog {'is_login':True,'username':edward} ''' return HttpResponse('登陆成功 ') return render(request, 'login.html') def index_session(request): # print('login',request.session['is_login']) 找不到会报错 print('login', request.session.get('is_login')) # 找不到不会报错 ''' 1. request.COOKIE.get('session') 2. django-session表中过滤记录: session-key session-data 5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog {'is_login':True,'username':edward} obj = django-session.objects.filter(session-key=5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog).first 3. obj.session-data.get('is_login') ''' is_login = request.session.get('is_login') if not is_login: return redirect('/login-session/') username = request.session.get('username') last_visit_time = request.session.get('last_visit_time') return render(request, 'index.html', {'username': username, 'last_visit_time': last_visit_time})
session的更新操作
一个服务器和一个浏览器只用一个session_key来维持,如果更新了账号密码,不会创建新的session_key,只会更新session_key对应的session_data。
''' if request.COOKIE.get('sessionid'): 更新 在django-session表中更新一条记录: session-key session-data 5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog 更新 else: 1.生成一个随机字符串 5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog 2.response.set_cookie('sessionid',5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog 3.在django_session表中创建一条记录: session-key session-data 5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog {'is_login':True,'username':edward} '''
session的注销功能
def login_out(request): # del request.session['is_login'] # 只删除了一个键值,我们要做的是删除整条记录 request.session.flush() ''' flush()做的三个操作 1.random_str = request.COOKIE.get("sessionid") 2.django-session.objects.filter(session-key=random_str).delete() 3.response.delete_cookie("sessionid",path="/",random_str) 把cookie也删了 ''' return redirect('/login/')
html
<a href="/login-out">注销 </a>
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,默认修改之后才保存(默认) 如果设置为True了,每次访问都会往后推一天