Django笔记:Cookie和Session

python

在Django中,cookie和session都是使用键值对的形式来进行存储和操作的,可以使用response_obj.set_cookie()response_obj.delete_cookie()request.COOKIES等方式来设置、删除和获取cookie信息,使用request.session中的方法来操作session数据。

一、cookie操作

cookie是以键值对的形式保存在响应对象中并返回给客户端的,所以操作cookie需要在HttpResponseBase对象或其子类对象中操作并返回给客户端。

设置cookie

使用HttpResponseBase对象或其子类对象的set_cookie方法进行设置,该方法的常用参数如下:

  • key:键值对的key

  • value:键值对的value

  • max_age:有效期(秒),默认是浏览器会话结束时到期(即关闭整个浏览器时到期)。

  • expires:设置具体的过期日期,可以是一个datetime对象或者符合日期时间格式的字符串。如果同时设置了max_ageexpires,那么将会采用expires

  • path:设置cookie的有效url路径,默认为域名下的根路径,即根路径下所有的路径都是有效的。

  • domain:设置cookie的有效域名,默认为主域名下都有效,如果只是想针对某个子域名设置cookie,则可以设置此参数。

  • secure:默认False,如果设置为True,则表示只能在https协议下才有效。

  • httponly:默认False,如果设置为True,则表示客户端不能通过JavaScript操作cookie。

# 视图函数返回一个带有cookie信息的响应对象

def index(request):

response = HttpResponse("cookie page!")

response.set_cookie("username", "zhangsan", max_age=180)

return response

获取cookie

直接通过request.COOKIES获取即可,这是一个字典对象,通过操作字典的方式进行操作即可。

删除cookie

直接使用HttpResponseBase对象或其子类对象的delete_cookie(key)方法删除对应key的信息即可。

二、session操作

Django中默认是把session数据保存在数据库中(使用migrate命令时会自动生成一个django_session表,这个表就是专门用来存储session数据的),客户端请求时,会将该session的sessionid加入cookie中返回给客户端,同样的,如果需要session中的数据,就会根据cookie中sessionid去数据库中获取对应的session数据。

session常用操作

直接使用request.session即可进行session操作,可以像操作字典一样去操作request.session。注意,在request.session上操作之后不需要再到响应对象上进行操作了,包括cookie的操作也是不需要我们去进行了,Django会自动将该session的sessionid添加到cookie中并返回给客户端的。
request.session中常用的方法:

  • get:获取session中指定的值。

  • pop:删除session中指定的值。

  • keys:获取session中的所有key。

  • items:获取session中所有的键值对。

  • clear:清除当前用户的所有session数据。这个方法不会立即删除数据库中的数据,客户端也会保留对应的sessionid,只不过无法获取到对应的session数据而已。

  • flush:删除session,并且删除在客户端保存的sessionid。这个方法会同时删除数据库和客户端中对应session数据,所以这个方法通常在注销等功能上用的较多。

  • set_expiry(value):设置过期时间。如果value是0,则表示浏览器关闭时session过期;如果value是正整数,则表示多少秒后过期;如果是None,则表示使用全局配置的session过期时间,即settings.py中的SESSION_COOKIE_AGE配置项,默认为2周的时间。

  • clear_expired:清除数据库中过期的session数据。因为Django不会自动清理过期的session数据,所以需要我们手动的清除这些数据,除了使用这个方法外,还可以在终端使用命令python manage.py clearsessions来清除过期的session数据。

# 在视图函数中获取session信息

def session_test_view(request):

# request.session["username"] = "zhangsan"

username = request.session.get("username")

print(username)

return HttpResponse("session page!")

session的存储方案

Django中默认是把session数据存储在数据库中的,但是Django也提供了其他的session存储方案,在settings.py中配置SESSION_ENGINE为以下对应项即可:

  • django.contrib.sessions.backends.db:默认存储方案,使用数据库进行存储。

  • django.contrib.sessions.backends.file:使用文件来存储。

  • django.contrib.sessions.backends.cache:使用缓存来存储。想要使用这个方案,需要在settings.py中配置CACHES,并且使用Memcached缓存系统,不能使用纯粹的内存来存储。

  • django.contrib.sessions.backends.cached_db:会将数据同时存储到缓存和数据库中,获取数据时会优先到缓存中获取数据,如果缓存发生意外,数据也不会丢失,还可以从数据库中找回来。

  • django.contrib.sessions.backends.signed_cookies:将session信息加密后存储到浏览器的cookie中。使用这个方案,需要注意下:建议配置SESSION_COOKIE_HTTPONLY=True,那么浏览器就不能通过JavaScript来操作session数据了;还需要设置SECRET_KEY,并防止其泄露;当然,cookie中总的数据大小不能超过4KB。

以上是 Django笔记:Cookie和Session 的全部内容, 来源链接: utcz.com/z/530601.html

回到顶部