My--Django的session与cookie操作

mac2025-06-18  2

Cookie操作

cookie:客户端游览器上的一个文件,以键值对进行保存,类似字典{‘k’:‘sfs’},与服务器端没有关系,当游览器访问服务器时候,服务器会 生成一个随机字符串保存在cookie中返回给客户端,这样当客户端游览器下次访问服务器端时候,会带着这个保存了服务器端的随机字符串的 cookie访问服务器,服务器端收到请求后,经过检查此cookie已存在此随机字符串,表示此客户端为已通过认证的状态,可以直接登录。

#定义设置cookie(存储) def save_cookie(request): #定义回应 response = HttpResponse("存储cookie ok") #定义过期时间 expires = datetime(year=2019,month=11,day=20,hour=15,minute=5,second=0) #转储为django内置时间 expires = make_aware(expires) #进行存储动作 response.set_cookie("username","jack",expires=expires) #将回应对象返回 return response #定义获取cookie(取) def get_cookie(request): #定义变量获取cookies属性 cookies = request.COOKIES #从cookies通过key获取value username = cookies.get("username","未拿到用户名") #将用户名返回 return HttpResponse(username) #定义删除cookie方法 def del_cookie(request): #定义response对象 response = HttpResponse("删除cookie成功") #调用delete_cookie()方法来删除cookie response.delete_cookie("username") #返回response return response # 设置加密cookies response.set_cookie('passsword','123456',salt='@#$!%^&') # 获取加密的cookie request.get_signed_cookie("password",salt="@#$!%^&")

Session操作

django中的session默认情况下是存储在服务器的数据库中的,在表中会根据sessionid来提取指定的session数据,然后再把这个sessionid放到cookie中发送给浏览器存储,浏览器下次在向服务器发送请求的时候会自动的把所有cookie信息都发送给服务器,服务器再从cookie中获取sessionid,然后再从数据库中获取session数据。但是在操作session的时候,这些细节压根就不用管。只需要通过request.session即可操作。

# setting.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', # session相关 'django.contrib.messages', 'django.contrib.staticfiles', ] # 设置session request.session["name"] = "root" # 获取session name = request.sessin["name"] !!!说到这里需要提一下,django会默认为session使用json序列化。json序列化只能序列化一些基本数据类型,如数字,字符串,列表等。所以session不能直接存储对象.可以简单的在settings中添加 SESSION_SERIALIZER = "django.contrib.sessions.serializers.PickleSerializer" def index(request): request.session.get('username') return HttpResponse('index')

session常用的方法如下:

get():用来从session中获取指定值。

pop():从session中返回key对应的值,且置数据库中django_session表的session_data字段为加密后的空

keys():从session中获取所有的键。

items():从session中获取所有的值。

clear():清除当前这个用户的session数据。且置数据库中django_session表的session_data字段为加密后的空

flush():删除session并且删除在数据库中存储的session_id,一般在注销的时候用得比较多。

set_expiry(value):设置过期时间。

整形:代表秒数,表示多少秒后过期。 0:代表只要浏览器关闭,session就会过期。 None:会使用全局的session配置。 在settings.py中可以设置SESSION_COOKIE_AGE来配置全局的过期时间。 如果没有设置,则默认是1209600秒,也就是2周的时间。 clear_expired():清除过期的session。Django并不会清除过期的session,需要定期手动的清理,或者是在终端,使用命令行python manage.py clearsessions来清除过期的session。

最新回复(0)