Django session 配置

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/baidu_39416074/article/details/81004798

Django对于Session有一些默认的通用配置,这些默认配置为:

1
2
3
4
5
6
7
8
SESSION_COOKIE_NAME ==  "sessionid"       #Session的cookie保存在浏览器上时的key
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_SAVE_EVERY_REQUEST = False       #是否设置关闭浏览器使得Session过期
SESSION_COOKIE_AT_BROWSER_CLOSE = False  #是否每次请求都保存Session,默认修改之后才能保存

这些配置可以在settings.py文件中写入并进行更改


Django中,Session可以保存在数据库中,可以保存到缓冲中,也可以保存到文件中,默认情况下是保存在数据库中,数据库中有一张Sessions表。可以通过修改settings.py文件来修改session的保存方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
默认保存在数据库中:
SESSION_ENGINE =  'django.contrib.sessions.backends.db'
 
保存在文件中
SESSION_ENGINE =  'django.contrib.sessions.backends.file'
 
 
保存在缓存中
SESSION_ENGINE =   'django.contrib.sessions.backends.cache'
 
 
同时保存到缓存和数据库中
SESSION_ENGINE =   'django.contrib.sessions.backends.cache_db'



Django关于Session的操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
request.session.set_expiry(value)
如果value是个整数, session会在这些秒后失效
如果value是个datatime或timedelta,session就会在这个时间后失效
如果value是0,用户关闭浏览器session就会失效
如果value是None,session会依赖全局session失效策略
 
request.session.delete( "session_key" )
删除当前用户的所有session数据
 
request.session. clear ()
清除所有session
 
request.session[ 'k1' ]
request.session.get( 'k1' ,None)
 
request.session[ 'k1' ] =123
不存则设置,存在则更新
 
request.session.setdefault( 'k1' ,123)
存在则不设置
--------------------------------------------------------------

session的工作过程

1、    生成随机字符串

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

3、    保存到session中

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

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

request.session["username"]=user

这里的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"],如果不存在则会报错,为了防止出错可以request.session.get('k1',none)

 

request.session['k1'] = 123 设置session值

request.session.setdefault('k1',123)  存在则不设置

del request.session['k1']  删除

request.session.clear()    删除

 

所有 键、值、键值对

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")

 

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供开发者使用:

数据库(默认)

缓存

文件

缓存+数据库

加密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),此处别名依赖缓存的设置

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

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

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

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

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

猜你喜欢

转载自blog.csdn.net/baidu_39416074/article/details/81004798