Django session设置

一、Session一些基本用法:

1、在使用session之前必须在数据库创建相关的表(django_session),一般会自动创建好

2、调用request.session首先会接收请求头部的cookie是否有sessionid,进行表查询对比

3、如果有(如果过期了)重新生成一个sessionid进行覆盖更新记录,并将随机生成的sessionid添加到cookie返回前端。

4、没有则新建存进表中的session_key,同时将字典信息加密自动存进表中的session_data字段,auth模块的login()函数中已经封装了这些操作。

5、删除Session:

request.session.flush() #删除服务端的session,删除当前的会话数据并删除会话的Cookie。#这用于确保前面的会话数据不可以再次被用户的浏览器访问

request.session.clear_expired() # 将所有Session失效日期小于当前日期的数据删除,将过期的删除

del request.session['k1'] #django-session表里面同步删除session_data中k1这个键值对

request.session.delete() # 删除当前会话的所有Session数据,也就是当前会话的一整条数据

6、其他关于Session的设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 1.设置session值
request.session["session_name"]="admin"
# 2.获取session值
session_name = request.session["session_name"]
# 3.删除session值
del request.session["session_name"] 删除一组键值对
request.session.flush() 删除一条记录
# 删除当前的会话数据并删除会话的Cookie,django.contrib.auth.logout() 函数中就会调用它。
# 4. 检测是否操作session值
`if "session_name" is request.session:`
# 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 用户session的随机字符串
request.session.session_key
#10 将所有Session失效日期小于当前日期的数据删除
request.session.clear_expired()
#11 检查 用户session的随机字符串 在数据库中是否
request.session.exists("session_key")
#12 删除当前用户的所有Session数据
request.session.delete("session_key")

查询django_session表:

刚建立会话的session(第一行的数据)

{:width=”100%” align=”center”}

在已经有会话的基础上,添加了一个新的session

{:width=”100%” align=”center”}

在已经有会话的基础上,删除了这个新的session,又回到了之前的session_data状态

{:width=”100%” align=”center”}

❤❤❤注意:
django session表是针对浏览器的,不同的浏览器来 才会有不同的记录 ,也就是同一个浏览器不关闭情况下多次登录,对应的是同一个sessionid。

② 结束会话,del 会删除django_session表中对应会话的sessionid属性,而delete()则会删除整条会话属性。

③ 添加新的session并不会修改当前sessionid属性,只会修改session data,而通过del该关键字就会返回到添加新的session前的session data状态。
因此在已经存在会话时,新建新的session并不会修改当前sessionid,因此也不会影响包含sessionidcookie向服务器请求的响应结果。

二、setting.py中的session配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 会话session设置
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认)

SESSION_COOKIE_NAME = "e_mall_sessionid"

# Session的cookie保存在浏览器上时的key,session根据此key来生成,如果不支持cookie,那么也就不支持session
# 浏览器关闭之后清除的是cookie所保存的服务器传下来的sessionid,而不是session,一旦请求头中的sessionid匹配不上服务器中的sessionid,则请求失败。
# 当session过期后,服务器才会传递一个新的session

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 = 60 * 24 * 60 # Session的cookie失效日期(30min)(默认),和SESSION_EXPIRE_AT_BROWSER_CLOSE二选一

SESSION_EXPIRE_AT_BROWSER_CLOSE = True # 是否关闭浏览器使得Session过期(默认)

SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!