My--Django的session与cookie操作

  • 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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值