Django中 如何设置sessiond的过期时间


`session`的有效期时间是通过`request.session.set_expiry(value)`进行设置的。

1. 如果`value`是一个`int`类型,那么`session`将在`value`这个时间后过期,其中`value`代表的是秒。
2. 如果`value`是一个`datetime`或者`timedelta`对象,那么这个`session`将在指定的时间后过期。`datetime`必须是使用了`PickleSerializer`进行序列化的。
3. 如果`value`等于`0`,那么`session`将在web浏览器关闭后就直接过期。
4. 如果`value`等于None,那么`session`将用`settings.py`中设置的全局过期字段`SESSION_COOKIE_AGE`,这个字段默认是14天,也就是2个礼拜。
5. 读`session`的时候不会修改`session`的有效期,修改`session`的时候会重新设置`session`的有效期,会从修改的时间,重新计时。
6. 如果`settings.py`中设置了`SESSION_EXPIRE_AT_BROWSER_CLOSE=True`,那么默认讲不再使用`SESSION_COOKIE_AGE`了,而是浏览器一关闭,`session`数据就会过期。这个值默认是为`False`。


### `session`保存的设置:
`session`可以保存在**文件**,**数据库**,**缓存**以及**cookie**中,要设置`session`的保存路径,需要在`settings.py`中设置`SESSION_ENGINE`:

1. 基于缓存的:`django.contrib.sessions.backends.cache`,如果设置缓存的,那么`session`中的所有数据将存储在内存中。同时,需要在`settings.py`中配置`CACHES`,一般我们使用`memcached`作为缓存,通过以下代码进行配置:

```
CACHES = {
  'default': {
  'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
  'LOCATION': ['127.0.0.1:11211',]
  }
}
```

django 中设置redis

```
CACHES = {
  'default': {
  'BACKEND': 'django_redis.cache.RedisCache',
  'LOCATION': ['127.0.0.1:6379',]
  }
}
```

2. 基于文件存储的:`django.contrib.sessions.backends.file`,那么需要配置`SESSION_FILE_PATH`来控制缓存的文件路径。
3. 基于`cookie`的:`django.contrib.sessions.backends.signed_cookies`,那么所有的`session`数据都会被保存在`cookie`中。
4. 基于数据库的:如果不配置`SESSION_ENGINE`,那么默认就是使用数据库来作为存储,如果需要显示配置,那么配置项是`django.contrib.sessions.backends.db`。
5. 基于数据库+缓存的:`django.contrib.sessions.backends.cached_db`,这种情况,每次往缓存中写数据的时候,都会同步到数据库中,来做一个持久化。每次读session数据的时候,都优先从缓存中查找,如果缓存中没有这个值了,才从数据库中查找。


### 如何清除`sessions`数据:
`session`默认只是过期,为了考虑到数据的需要,`django`并不会从数据库或者文件中删除,所以这个要运维人员或者后台管理人员手动的清除那些已经过期了的`session`,最快捷的方式是通过命令定时的删除:`python manage.py clearsessions`,当然,如果`backend`是存储在`cookie`或者缓存中,那么他们将在过期后自动删除。

 

posted @ 2017-09-24 17:04  随风无义  阅读(1678)  评论(0)    收藏  举报